mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
much more shaders
This commit is contained in:
parent
11083df76b
commit
1bd2f98959
25 changed files with 578 additions and 40 deletions
|
|
@ -368,6 +368,8 @@ class DtsObject extends GameObject {
|
||||||
onFinish();
|
onFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function postProcessMaterial(matName:String, material:Material) {}
|
||||||
|
|
||||||
function computeMaterials() {
|
function computeMaterials() {
|
||||||
var environmentMaterial:Material = null;
|
var environmentMaterial:Material = null;
|
||||||
|
|
||||||
|
|
@ -467,6 +469,8 @@ class DtsObject extends GameObject {
|
||||||
material.mainPass.addShader(cubemapshader);
|
material.mainPass.addShader(cubemapshader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
postProcessMaterial(matName, material);
|
||||||
|
|
||||||
this.materials.push(material);
|
this.materials.push(material);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -723,6 +727,16 @@ class DtsObject extends GameObject {
|
||||||
n2.scale(-1);
|
n2.scale(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t0.x *= -1;
|
||||||
|
t1.x *= -1;
|
||||||
|
t2.x *= -1;
|
||||||
|
b0.x *= -1;
|
||||||
|
b1.x *= -1;
|
||||||
|
b2.x *= -1;
|
||||||
|
n0.x *= -1;
|
||||||
|
n1.x *= -1;
|
||||||
|
n2.x *= -1;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
tangent: t0,
|
tangent: t0,
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ class MarbleWorldMacros {
|
||||||
shape = new EndPad();
|
shape = new EndPad();
|
||||||
if (element is MissionElementStaticShape && cast(element, MissionElementStaticShape) == endPadElement)
|
if (element is MissionElementStaticShape && cast(element, MissionElementStaticShape) == endPadElement)
|
||||||
endPad = cast shape;
|
endPad = cast shape;
|
||||||
} else if (StringTools.startsWith(dataBlockLowerCase, "signplain"))
|
} else if (StringTools.startsWith(dataBlockLowerCase, "arrow"))
|
||||||
shape = new SignPlain(cast element);
|
shape = new SignPlain(cast element);
|
||||||
else if (StringTools.startsWith(dataBlockLowerCase, "gemitem")) {
|
else if (StringTools.startsWith(dataBlockLowerCase, "gemitem")) {
|
||||||
shape = new Gem(cast element);
|
shape = new Gem(cast element);
|
||||||
|
|
@ -76,9 +76,9 @@ class MarbleWorldMacros {
|
||||||
shape = new RoundBumper();
|
shape = new RoundBumper();
|
||||||
else if (dataBlockLowerCase == "helicopteritem")
|
else if (dataBlockLowerCase == "helicopteritem")
|
||||||
shape = new Helicopter(cast element);
|
shape = new Helicopter(cast element);
|
||||||
else if (dataBlockLowerCase == "easteregg")
|
else if (dataBlockLowerCase == "eastereggitem")
|
||||||
shape = new EasterEgg(cast element);
|
shape = new EasterEgg(cast element);
|
||||||
else if (dataBlockLowerCase == "checkpoint")
|
else if (dataBlockLowerCase == "checkpointshape")
|
||||||
shape = new Checkpoint(cast element);
|
shape = new Checkpoint(cast element);
|
||||||
else if (dataBlockLowerCase == "ductfan")
|
else if (dataBlockLowerCase == "ductfan")
|
||||||
shape = new DuctFan();
|
shape = new DuctFan();
|
||||||
|
|
@ -98,8 +98,6 @@ class MarbleWorldMacros {
|
||||||
shape = new MegaMarble(cast element);
|
shape = new MegaMarble(cast element);
|
||||||
else if (dataBlockLowerCase == "trapdoor")
|
else if (dataBlockLowerCase == "trapdoor")
|
||||||
shape = new Trapdoor();
|
shape = new Trapdoor();
|
||||||
else if (dataBlockLowerCase == "arrow" || StringTools.startsWith(dataBlockLowerCase, "sign"))
|
|
||||||
shape = new Sign(cast element);
|
|
||||||
else if ([
|
else if ([
|
||||||
"glass_3shape",
|
"glass_3shape",
|
||||||
"glass_6shape",
|
"glass_6shape",
|
||||||
|
|
@ -109,7 +107,11 @@ class MarbleWorldMacros {
|
||||||
"glass_18shape"
|
"glass_18shape"
|
||||||
].contains(dataBlockLowerCase))
|
].contains(dataBlockLowerCase))
|
||||||
shape = new Glass(cast element);
|
shape = new Glass(cast element);
|
||||||
else if (["clear", "cloudy", "dusk", "wintry"].contains(dataBlockLowerCase))
|
else if ([
|
||||||
|
"astrolabecloudsbeginnershape",
|
||||||
|
"astrolabecloudsintermediateshape",
|
||||||
|
"astrolabecloudsadvancedshape"
|
||||||
|
].contains(dataBlockLowerCase))
|
||||||
shape = new shapes.Sky(dataBlockLowerCase);
|
shape = new shapes.Sky(dataBlockLowerCase);
|
||||||
else {
|
else {
|
||||||
Console.error("Unknown item: " + element.datablock);
|
Console.error("Unknown item: " + element.datablock);
|
||||||
|
|
|
||||||
|
|
@ -444,9 +444,9 @@ class Marble extends GameObject {
|
||||||
this.forcefield.isBoundingBoxCollideable = false;
|
this.forcefield.isBoundingBoxCollideable = false;
|
||||||
|
|
||||||
this.helicopter = new DtsObject();
|
this.helicopter = new DtsObject();
|
||||||
this.helicopter.dtsPath = "data/shapes/images/helicopter.dts";
|
this.helicopter.dtsPath = "data/shapes/images/helicopter_image.dts";
|
||||||
this.helicopter.useInstancing = true;
|
this.helicopter.useInstancing = true;
|
||||||
this.helicopter.identifier = "Helicopter";
|
this.helicopter.identifier = "HelicopterImage";
|
||||||
this.helicopter.showSequences = true;
|
this.helicopter.showSequences = true;
|
||||||
this.helicopter.isBoundingBoxCollideable = false;
|
this.helicopter.isBoundingBoxCollideable = false;
|
||||||
// this.addChild(this.helicopter);
|
// this.addChild(this.helicopter);
|
||||||
|
|
|
||||||
|
|
@ -542,7 +542,7 @@ class PlayGui {
|
||||||
powerupImageObject.dtsPath = "data/shapes/images/helicopter.dts";
|
powerupImageObject.dtsPath = "data/shapes/images/helicopter.dts";
|
||||||
} else if (powerupIdentifier == "MegaMarble") {
|
} else if (powerupIdentifier == "MegaMarble") {
|
||||||
powerupImageObject = new DtsObject();
|
powerupImageObject = new DtsObject();
|
||||||
powerupImageObject.dtsPath = "data/shapes/items/megamarble.dts";
|
powerupImageObject.dtsPath = "data/shapes/images/grow.dts";
|
||||||
} else {
|
} else {
|
||||||
powerupIdentifier = "";
|
powerupIdentifier = "";
|
||||||
this.powerupImageObject = null;
|
this.powerupImageObject = null;
|
||||||
|
|
|
||||||
72
src/shaders/DefaultCubemapNormalNoSpecMaterial.hx
Normal file
72
src/shaders/DefaultCubemapNormalNoSpecMaterial.hx
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
package shaders;
|
||||||
|
|
||||||
|
class DefaultCubemapNormalNoSpecMaterial extends hxsl.Shader {
|
||||||
|
static var SRC = {
|
||||||
|
@param var diffuseMap:Sampler2D;
|
||||||
|
@param var cubeMap:SamplerCube;
|
||||||
|
@param var secondaryMapUvFactor:Float;
|
||||||
|
@global var camera:{
|
||||||
|
var position:Vec3;
|
||||||
|
@var var dir:Vec3;
|
||||||
|
};
|
||||||
|
@global var global:{
|
||||||
|
@perObject var modelView:Mat4;
|
||||||
|
@perObject var modelViewInverse:Mat4;
|
||||||
|
};
|
||||||
|
@input var input:{
|
||||||
|
var position:Vec3;
|
||||||
|
var normal:Vec3;
|
||||||
|
var uv:Vec2;
|
||||||
|
var t:Vec3;
|
||||||
|
var b:Vec3;
|
||||||
|
var n:Vec3;
|
||||||
|
};
|
||||||
|
var calculatedUV:Vec2;
|
||||||
|
var pixelColor:Vec4;
|
||||||
|
var specColor:Vec3;
|
||||||
|
var specPower:Float;
|
||||||
|
var pixelTransformedPosition:Vec3;
|
||||||
|
var transformedNormal:Vec3;
|
||||||
|
@var var outShading:Vec4;
|
||||||
|
@var var outReflectVec:Vec3;
|
||||||
|
function lambert(normal:Vec3, lightPosition:Vec3):Float {
|
||||||
|
var result = dot(normal, lightPosition);
|
||||||
|
return saturate(result);
|
||||||
|
}
|
||||||
|
function vertex() {
|
||||||
|
calculatedUV = input.uv;
|
||||||
|
var inLightVec = vec3(-0.5732, 0.27536, -0.77176) * mat3(global.modelViewInverse);
|
||||||
|
outShading = vec4(saturate(dot(-inLightVec, input.normal)));
|
||||||
|
outShading.w = 1;
|
||||||
|
outShading *= vec4(1.08, 1.03, 0.90, 1);
|
||||||
|
|
||||||
|
// eyePos /= vec3(global.modelViewInverse[0].x, global.modelViewInverse[1].y, global.modelViewInverse[2].z);
|
||||||
|
var cubeTrans = mat3(global.modelView);
|
||||||
|
var cubeEyePos = camera.position - global.modelView[3].xyz;
|
||||||
|
|
||||||
|
var cubeVertPos = input.position * cubeTrans;
|
||||||
|
var cubeNormal = (input.normal * cubeTrans).normalize();
|
||||||
|
var eyeToVert = cubeVertPos - cubeEyePos;
|
||||||
|
outReflectVec = reflect(eyeToVert, cubeNormal);
|
||||||
|
}
|
||||||
|
function fragment() {
|
||||||
|
// Diffuse part
|
||||||
|
var diffuse = diffuseMap.get(calculatedUV);
|
||||||
|
var ambient = vec4(0.472, 0.424, 0.475, 1.00);
|
||||||
|
|
||||||
|
var outCol = (outShading + ambient) * diffuse;
|
||||||
|
var incidentRay = normalize(pixelTransformedPosition - camera.position);
|
||||||
|
var reflectionRay = reflect(incidentRay, transformedNormal);
|
||||||
|
outCol += diffuse.a * cubeMap.get(outReflectVec);
|
||||||
|
|
||||||
|
pixelColor = outCol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function new(diffuse, secondaryMapUvFactor, skybox) {
|
||||||
|
super();
|
||||||
|
this.diffuseMap = diffuse;
|
||||||
|
this.cubeMap = skybox;
|
||||||
|
this.secondaryMapUvFactor = secondaryMapUvFactor;
|
||||||
|
}
|
||||||
|
}
|
||||||
46
src/shaders/DefaultDiffuseMaterial.hx
Normal file
46
src/shaders/DefaultDiffuseMaterial.hx
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
package shaders;
|
||||||
|
|
||||||
|
class DefaultDiffuseMaterial extends hxsl.Shader {
|
||||||
|
static var SRC = {
|
||||||
|
@param var diffuseMap:Sampler2D;
|
||||||
|
@global var camera:{
|
||||||
|
var position:Vec3;
|
||||||
|
@var var dir:Vec3;
|
||||||
|
};
|
||||||
|
@global var global:{
|
||||||
|
@perObject var modelView:Mat4;
|
||||||
|
@perObject var modelViewInverse:Mat4;
|
||||||
|
};
|
||||||
|
@input var input:{
|
||||||
|
var position:Vec3;
|
||||||
|
var normal:Vec3;
|
||||||
|
var uv:Vec2;
|
||||||
|
var t:Vec3;
|
||||||
|
var b:Vec3;
|
||||||
|
var n:Vec3;
|
||||||
|
};
|
||||||
|
var calculatedUV:Vec2;
|
||||||
|
var pixelColor:Vec4;
|
||||||
|
@var var outShading:Vec4;
|
||||||
|
function vertex() {
|
||||||
|
calculatedUV = input.uv;
|
||||||
|
var objToTangentSpace = mat3(input.t, input.b, input.n);
|
||||||
|
var inLightVec = vec3(-0.5732, 0.27536, -0.77176) * mat3(global.modelViewInverse);
|
||||||
|
outShading = vec4(saturate(dot(-inLightVec, input.normal)));
|
||||||
|
outShading.w = 1;
|
||||||
|
outShading *= vec4(1.08, 1.03, 0.90, 1);
|
||||||
|
}
|
||||||
|
function fragment() {
|
||||||
|
var diffuse = diffuseMap.get(calculatedUV);
|
||||||
|
var ambient = vec4(0.472, 0.424, 0.475, 1.00);
|
||||||
|
var outCol = outShading + ambient;
|
||||||
|
outCol *= diffuse;
|
||||||
|
pixelColor = outCol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function new(diffuse) {
|
||||||
|
super();
|
||||||
|
this.diffuseMap = diffuse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -31,6 +31,7 @@ class DefaultMaterial extends hxsl.Shader {
|
||||||
@var var outPos:Vec3;
|
@var var outPos:Vec3;
|
||||||
@var var outEyePos:Vec3;
|
@var var outEyePos:Vec3;
|
||||||
@const var isHalfTile:Bool;
|
@const var isHalfTile:Bool;
|
||||||
|
@const var doGammaRamp:Bool;
|
||||||
function lambert(normal:Vec3, lightPosition:Vec3):Float {
|
function lambert(normal:Vec3, lightPosition:Vec3):Float {
|
||||||
var result = dot(normal, lightPosition);
|
var result = dot(normal, lightPosition);
|
||||||
return saturate(result);
|
return saturate(result);
|
||||||
|
|
@ -73,11 +74,13 @@ class DefaultMaterial extends hxsl.Shader {
|
||||||
outCol += specular * diffuse.a;
|
outCol += specular * diffuse.a;
|
||||||
|
|
||||||
// Gamma correction using our regression model
|
// Gamma correction using our regression model
|
||||||
var a = 1.00759;
|
if (doGammaRamp) {
|
||||||
var b = 1.18764;
|
var a = 1.00759;
|
||||||
outCol.x = a * pow(outCol.x, b);
|
var b = 1.18764;
|
||||||
outCol.y = a * pow(outCol.y, b);
|
outCol.x = a * pow(outCol.x, b);
|
||||||
outCol.z = a * pow(outCol.z, b);
|
outCol.y = a * pow(outCol.y, b);
|
||||||
|
outCol.z = a * pow(outCol.z, b);
|
||||||
|
}
|
||||||
|
|
||||||
pixelColor = outCol;
|
pixelColor = outCol;
|
||||||
}
|
}
|
||||||
|
|
@ -91,5 +94,6 @@ class DefaultMaterial extends hxsl.Shader {
|
||||||
this.specularColor = specularColor;
|
this.specularColor = specularColor;
|
||||||
this.secondaryMapUvFactor = secondaryMapUvFactor;
|
this.secondaryMapUvFactor = secondaryMapUvFactor;
|
||||||
this.isHalfTile = isHalfTile;
|
this.isHalfTile = isHalfTile;
|
||||||
|
this.doGammaRamp = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ class DefaultNormalMaterial extends hxsl.Shader {
|
||||||
var pixelColor:Vec4;
|
var pixelColor:Vec4;
|
||||||
var specColor:Vec3;
|
var specColor:Vec3;
|
||||||
var specPower:Float;
|
var specPower:Float;
|
||||||
|
@const var doGammaRamp:Bool;
|
||||||
@var var outShading:Vec4;
|
@var var outShading:Vec4;
|
||||||
@var var outLightVec:Vec4;
|
@var var outLightVec:Vec4;
|
||||||
@var var outEyePos:Vec3;
|
@var var outEyePos:Vec3;
|
||||||
|
|
@ -62,11 +63,13 @@ class DefaultNormalMaterial extends hxsl.Shader {
|
||||||
outCol += specular * diffuse.a;
|
outCol += specular * diffuse.a;
|
||||||
|
|
||||||
// Gamma correction using our regression model
|
// Gamma correction using our regression model
|
||||||
var a = 1.00759;
|
if (doGammaRamp) {
|
||||||
var b = 1.18764;
|
var a = 1.00759;
|
||||||
outCol.x = a * pow(outCol.x, b);
|
var b = 1.18764;
|
||||||
outCol.y = a * pow(outCol.y, b);
|
outCol.x = a * pow(outCol.x, b);
|
||||||
outCol.z = a * pow(outCol.z, b);
|
outCol.y = a * pow(outCol.y, b);
|
||||||
|
outCol.z = a * pow(outCol.z, b);
|
||||||
|
}
|
||||||
|
|
||||||
pixelColor = outCol;
|
pixelColor = outCol;
|
||||||
}
|
}
|
||||||
|
|
@ -78,5 +81,6 @@ class DefaultNormalMaterial extends hxsl.Shader {
|
||||||
this.shininess = shininess;
|
this.shininess = shininess;
|
||||||
this.specularColor = specularColor;
|
this.specularColor = specularColor;
|
||||||
this.secondaryMapUvFactor = secondaryMapUvFactor;
|
this.secondaryMapUvFactor = secondaryMapUvFactor;
|
||||||
|
this.doGammaRamp = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ class DtsTexture extends hxsl.Shader {
|
||||||
@range(0, 1) @param var killAlphaThreshold:Float;
|
@range(0, 1) @param var killAlphaThreshold:Float;
|
||||||
@param var texture:Sampler2D;
|
@param var texture:Sampler2D;
|
||||||
@const var normalizeNormals:Bool;
|
@const var normalizeNormals:Bool;
|
||||||
|
@const var passThrough:Bool;
|
||||||
@perInstance @param var currentOpacity:Float;
|
@perInstance @param var currentOpacity:Float;
|
||||||
var calculatedUV:Vec2;
|
var calculatedUV:Vec2;
|
||||||
var pixelColor:Vec4;
|
var pixelColor:Vec4;
|
||||||
|
|
@ -34,13 +35,17 @@ class DtsTexture extends hxsl.Shader {
|
||||||
var c = texture.get(calculatedUV);
|
var c = texture.get(calculatedUV);
|
||||||
if (killAlpha && c.a - killAlphaThreshold < 0)
|
if (killAlpha && c.a - killAlphaThreshold < 0)
|
||||||
discard;
|
discard;
|
||||||
if (additive)
|
if (!passThrough) {
|
||||||
pixelColor = c;
|
if (additive)
|
||||||
else
|
pixelColor = c;
|
||||||
pixelColor *= c;
|
else
|
||||||
if (specularAlpha)
|
pixelColor *= c;
|
||||||
specColor *= c.aaa;
|
if (specularAlpha)
|
||||||
pixelColor.a *= c.a * currentOpacity;
|
specColor *= c.aaa;
|
||||||
|
pixelColor.a *= c.a * currentOpacity;
|
||||||
|
} else {
|
||||||
|
pixelColor.a *= currentOpacity;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,4 +47,26 @@ class AntiGravity extends PowerUp {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "antigrav_skin") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/items/antigrav_skin.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var normalTex = ResourceLoader.getTexture("data/shapes/items/antigrav_bump.png").resource;
|
||||||
|
normalTex.wrap = Repeat;
|
||||||
|
normalTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultMaterial(diffuseTex, normalTex, 32, new h3d.Vector(0.8, 0.8, 0.6, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import mis.MissionElement.MissionElementItem;
|
||||||
class Blast extends PowerUp {
|
class Blast extends PowerUp {
|
||||||
public function new(element:MissionElementItem) {
|
public function new(element:MissionElementItem) {
|
||||||
super(element);
|
super(element);
|
||||||
this.dtsPath = "data/shapes/items/blast.dts";
|
this.dtsPath = "data/shapes/images/blast.dts";
|
||||||
this.isCollideable = false;
|
this.isCollideable = false;
|
||||||
this.isTSStatic = false;
|
this.isTSStatic = false;
|
||||||
this.showSequences = true;
|
this.showSequences = true;
|
||||||
|
|
@ -33,4 +33,26 @@ class Blast extends PowerUp {
|
||||||
public function use(timeState:TimeState) {
|
public function use(timeState:TimeState) {
|
||||||
this.level.blastAmount = 1.03;
|
this.level.blastAmount = 1.03;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "blast_orbit_skin") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/images/blast_orbit_skin.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var normalTex = ResourceLoader.getTexture("data/shapes/images/blast_orbit_bump.png").resource;
|
||||||
|
normalTex.wrap = Repeat;
|
||||||
|
normalTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultMaterial(diffuseTex, normalTex, 32, new h3d.Vector(0.8, 0.8, 0.6, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ class Checkpoint extends DtsObject {
|
||||||
|
|
||||||
public function new(element:MissionElementStaticShape) {
|
public function new(element:MissionElementStaticShape) {
|
||||||
super();
|
super();
|
||||||
this.dtsPath = "data/shapes/buttons/checkpoint.dts";
|
this.dtsPath = "data/shapes/pads/checkpad.dts";
|
||||||
this.isCollideable = true;
|
this.isCollideable = true;
|
||||||
this.isTSStatic = false;
|
this.isTSStatic = false;
|
||||||
this.identifier = "Checkpoint";
|
this.identifier = "Checkpoint";
|
||||||
|
|
|
||||||
|
|
@ -48,4 +48,23 @@ class DuctFan extends ForceObject {
|
||||||
if (this.soundChannel.pause)
|
if (this.soundChannel.pause)
|
||||||
this.soundChannel.pause = false;
|
this.soundChannel.pause = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "fan") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/hazards/fan.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultNormalMaterial(diffuseTex, 12, new Vector(0.8, 0.8, 0.6, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import src.ResourceLoader;
|
||||||
class EasterEgg extends PowerUp {
|
class EasterEgg extends PowerUp {
|
||||||
public function new(element:MissionElementItem) {
|
public function new(element:MissionElementItem) {
|
||||||
super(element);
|
super(element);
|
||||||
this.dtsPath = "data/shapes/items/easteregg.dts";
|
this.dtsPath = "data/shapes/items/egg.dts";
|
||||||
this.isCollideable = false;
|
this.isCollideable = false;
|
||||||
this.isTSStatic = false;
|
this.isTSStatic = false;
|
||||||
this.identifier = "EasterEgg";
|
this.identifier = "EasterEgg";
|
||||||
|
|
|
||||||
|
|
@ -65,4 +65,28 @@ class Gem extends DtsObject {
|
||||||
this.pickedUp = false;
|
this.pickedUp = false;
|
||||||
this.setOpacity(1);
|
this.setOpacity(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "red.gem") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture('data/shapes/items/red.gem.png').resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
|
||||||
|
var cubemapTex = new h3d.mat.Texture(64, 64, [Cube]);
|
||||||
|
var cubemapFace = ResourceLoader.getImage('data/skies/gemCubemapUp.png').resource;
|
||||||
|
for (i in 0...6) {
|
||||||
|
cubemapTex.uploadPixels(cubemapFace.getPixels(), 0, i);
|
||||||
|
}
|
||||||
|
var shader = new shaders.DefaultCubemapNormalNoSpecMaterial(diffuseTex, 1, cubemapTex);
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package shapes;
|
package shapes;
|
||||||
|
|
||||||
|
import h3d.mat.Material;
|
||||||
import src.ResourceLoader;
|
import src.ResourceLoader;
|
||||||
import mis.MissionElement.MissionElementItem;
|
import mis.MissionElement.MissionElementItem;
|
||||||
import src.TimeState;
|
import src.TimeState;
|
||||||
|
|
@ -36,4 +37,23 @@ class Helicopter extends PowerUp {
|
||||||
marble.enableHelicopter(timeState.currentAttemptTime);
|
marble.enableHelicopter(timeState.currentAttemptTime);
|
||||||
this.level.deselectPowerUp();
|
this.level.deselectPowerUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:Material) {
|
||||||
|
if (matName == "copter_skin") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/images/copter_skin.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultNormalMaterial(diffuseTex, 32, new h3d.Vector(1, 1, 1, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import src.AudioManager;
|
||||||
class MegaMarble extends PowerUp {
|
class MegaMarble extends PowerUp {
|
||||||
public function new(element:MissionElementItem) {
|
public function new(element:MissionElementItem) {
|
||||||
super(element);
|
super(element);
|
||||||
this.dtsPath = "data/shapes/items/megamarble.dts";
|
this.dtsPath = "data/shapes/images/grow.dts";
|
||||||
this.isCollideable = false;
|
this.isCollideable = false;
|
||||||
this.isTSStatic = false;
|
this.isTSStatic = false;
|
||||||
this.showSequences = true;
|
this.showSequences = true;
|
||||||
|
|
@ -43,4 +43,26 @@ class MegaMarble extends PowerUp {
|
||||||
this.level.deselectPowerUp();
|
this.level.deselectPowerUp();
|
||||||
AudioManager.playSound(ResourceLoader.getResource('data/sound/dosuperjump.wav', ResourceLoader.getAudio, this.soundResources));
|
AudioManager.playSound(ResourceLoader.getResource('data/sound/dosuperjump.wav', ResourceLoader.getAudio, this.soundResources));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "grow") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/images/grow.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var normalTex = ResourceLoader.getTexture("data/shapes/images/grow_bump.png").resource;
|
||||||
|
normalTex.wrap = Repeat;
|
||||||
|
normalTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultMaterial(diffuseTex, normalTex, 32, new h3d.Vector(0.8, 0.8, 0.6, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
package shapes;
|
package shapes;
|
||||||
|
|
||||||
|
import shaders.DtsTexture;
|
||||||
import collision.CollisionInfo;
|
import collision.CollisionInfo;
|
||||||
import src.DtsObject;
|
import src.DtsObject;
|
||||||
import src.TimeState;
|
import src.TimeState;
|
||||||
import src.Util;
|
import src.Util;
|
||||||
|
import src.ResourceLoader;
|
||||||
|
|
||||||
class RoundBumper extends AbstractBumper {
|
class RoundBumper extends AbstractBumper {
|
||||||
public function new() {
|
public function new() {
|
||||||
|
|
@ -12,4 +14,23 @@ class RoundBumper extends AbstractBumper {
|
||||||
isCollideable = true;
|
isCollideable = true;
|
||||||
identifier = "RoundBumper";
|
identifier = "RoundBumper";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "bumper") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/bumpers/bumper.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultNormalMaterial(diffuseTex, 12, new h3d.Vector(0.8, 0.8, 0.8, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package shapes;
|
||||||
|
|
||||||
import mis.MissionElement.MissionElementStaticShape;
|
import mis.MissionElement.MissionElementStaticShape;
|
||||||
import src.DtsObject;
|
import src.DtsObject;
|
||||||
|
import src.ResourceLoader;
|
||||||
|
|
||||||
class SignCaution extends DtsObject {
|
class SignCaution extends DtsObject {
|
||||||
public function new(element:MissionElementStaticShape) {
|
public function new(element:MissionElementStaticShape) {
|
||||||
|
|
@ -19,4 +20,86 @@ class SignCaution extends DtsObject {
|
||||||
}
|
}
|
||||||
this.identifier = "CautionSign" + type;
|
this.identifier = "CautionSign" + type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "base.cautionsign") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/signs/base.cautionsign.jpg").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultDiffuseMaterial(diffuseTex);
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matName == "caution.cautionsign") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/signs/caution.cautionsign.jpg").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultDiffuseMaterial(diffuseTex);
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matName == "danger.cautionsign") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/signs/danger.cautionsign.jpg").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultDiffuseMaterial(diffuseTex);
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matName == "cautionsignwood") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/signs/cautionsignwood.jpg").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultDiffuseMaterial(diffuseTex);
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matName == "cautionsign_pole") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/signs/cautionsign_pole.jpg").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultDiffuseMaterial(diffuseTex);
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,28 +2,87 @@ package shapes;
|
||||||
|
|
||||||
import mis.MissionElement.MissionElementStaticShape;
|
import mis.MissionElement.MissionElementStaticShape;
|
||||||
import src.DtsObject;
|
import src.DtsObject;
|
||||||
|
import src.ResourceLoader;
|
||||||
|
|
||||||
class SignPlain extends DtsObject {
|
class SignPlain extends DtsObject {
|
||||||
public function new(element:MissionElementStaticShape) {
|
public function new(element:MissionElementStaticShape) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.dtsPath = "data/shapes/signs/plainsign.dts";
|
|
||||||
this.isCollideable = true;
|
this.isCollideable = true;
|
||||||
this.useInstancing = true;
|
this.useInstancing = true;
|
||||||
|
|
||||||
// Determine the direction to show
|
// Determine the direction to show
|
||||||
var direction = element.datablock.substring("SignPlain".length).toLowerCase();
|
var direction = element.datablock.substring("Arrow".length).toLowerCase();
|
||||||
switch (direction) {
|
switch (direction) {
|
||||||
case "right":
|
case "side":
|
||||||
this.matNameOverride.set("base.plainsign", "right.plainsign");
|
this.dtsPath = 'data/shapes/signs/arrowsign_side.dts';
|
||||||
case "left":
|
|
||||||
this.matNameOverride.set("base.plainsign", "left.plainsign");
|
|
||||||
case "up":
|
case "up":
|
||||||
this.matNameOverride.set("base.plainsign", "up.plainsign");
|
this.dtsPath = 'data/shapes/signs/arrowsign_up.dts';
|
||||||
case "down":
|
case "down":
|
||||||
this.matNameOverride.set("base.plainsign", "down.plainsign");
|
this.dtsPath = 'data/shapes/signs/arrowsign_down.dts';
|
||||||
}
|
}
|
||||||
|
|
||||||
this.identifier = "SignPlain" + direction;
|
this.identifier = "SignPlain" + direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "arrowsign_arrow") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture('data/shapes/signs/arrowsign_arrow.png').resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultNormalMaterial(diffuseTex, 32, new h3d.Vector(1, 1, 1, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matName == "ArrowPostUVW") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture('data/shapes/signs/arrowpostUVW.png').resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultNormalMaterial(diffuseTex, 32, new h3d.Vector(0.8, 0.8, 0.6, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matName == "arrowsign_chain") {
|
||||||
|
material.blendMode = Alpha;
|
||||||
|
material.mainPass.enableLights = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matName == "arrowsign_post") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture('data/shapes/signs/arrowsign_post.png').resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var normalTex = ResourceLoader.getTexture("data/shapes/items/arrowsign_post_bump.png").resource;
|
||||||
|
normalTex.wrap = Repeat;
|
||||||
|
normalTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultMaterial(diffuseTex, normalTex, 12, new h3d.Vector(0.8, 0.8, 0.6, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,29 @@ class Sky extends DtsObject {
|
||||||
public function new(type:String) {
|
public function new(type:String) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.dtsPath = 'data/shapes/skies/${type}/${type}.dts';
|
if (type == "astrolabecloudsbeginnershape")
|
||||||
|
this.dtsPath = 'data/shapes/astrolabe/astrolabe_clouds_beginner.dts';
|
||||||
|
if (type == "astrolabecloudsintermediateshape")
|
||||||
|
this.dtsPath = 'data/shapes/astrolabe/astrolabe_clouds_intermediate.dts';
|
||||||
|
if (type == "astrolabecloudsadvancedshape")
|
||||||
|
this.dtsPath = 'data/shapes/astrolabe/astrolabe_clouds_advanced.dts';
|
||||||
|
|
||||||
this.isCollideable = false;
|
this.isCollideable = false;
|
||||||
this.useInstancing = true;
|
this.useInstancing = false;
|
||||||
|
|
||||||
this.identifier = type + "Sky";
|
this.identifier = type + "Sky";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override function init(level:src.MarbleWorld, onFinish:() -> Void) {
|
||||||
|
super.init(level, onFinish);
|
||||||
|
for (mat in this.materials) {
|
||||||
|
var thisprops:Dynamic = mat.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
mat.props = thisprops;
|
||||||
|
mat.shadows = false;
|
||||||
|
mat.receiveShadows = false;
|
||||||
|
mat.blendMode = Alpha;
|
||||||
|
mat.mainPass.culling = h3d.mat.Data.Face.None;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,4 +71,26 @@ class SuperJump extends PowerUp {
|
||||||
// this.level.particles.createEmitter(superJumpParticleOptions, null, () => Util.vecOimoToThree(marble.body.getPosition()));
|
// this.level.particles.createEmitter(superJumpParticleOptions, null, () => Util.vecOimoToThree(marble.body.getPosition()));
|
||||||
this.level.deselectPowerUp();
|
this.level.deselectPowerUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "superJump_skin") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/items/superjump_skin.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var normalTex = ResourceLoader.getTexture("data/shapes/items/superjump_bump.png").resource;
|
||||||
|
normalTex.wrap = Repeat;
|
||||||
|
normalTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultMaterial(diffuseTex, normalTex, 32, new h3d.Vector(1, 1, 1, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -89,4 +89,23 @@ class SuperSpeed extends PowerUp {
|
||||||
this.level.particleManager.createEmitter(superSpeedParticleOptions, this.ssEmitterParticleData, null, () -> marble.getAbsPos().getPosition());
|
this.level.particleManager.createEmitter(superSpeedParticleOptions, this.ssEmitterParticleData, null, () -> marble.getAbsPos().getPosition());
|
||||||
this.level.deselectPowerUp();
|
this.level.deselectPowerUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "superSpeed_skin") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/items/superSpeed_skin.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultNormalMaterial(diffuseTex, 32, new h3d.Vector(1, 1, 1, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,4 +46,26 @@ class TimeTravel extends PowerUp {
|
||||||
if (!this.level.rewinding)
|
if (!this.level.rewinding)
|
||||||
level.addBonusTime(this.timeBonus);
|
level.addBonusTime(this.timeBonus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "timeTravel_skin") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/items/timeTravel_skin.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultNormalMaterial(diffuseTex, 32, new h3d.Vector(1, 1, 1, 1), 1);
|
||||||
|
shader.doGammaRamp = false;
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
if (matName == "timeTravel_glass") {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,4 +77,22 @@ class Trapdoor extends DtsObject {
|
||||||
|
|
||||||
// this.level.replay.recordMarbleContact(this);
|
// this.level.replay.recordMarbleContact(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override function postProcessMaterial(matName:String, material:h3d.mat.Material) {
|
||||||
|
if (matName == "trapdoor") {
|
||||||
|
var diffuseTex = ResourceLoader.getTexture("data/shapes/hazards/trapdoor.png").resource;
|
||||||
|
diffuseTex.wrap = Repeat;
|
||||||
|
diffuseTex.mipMap = Nearest;
|
||||||
|
var shader = new shaders.DefaultDiffuseMaterial(diffuseTex);
|
||||||
|
var dtsTex = material.mainPass.getShader(shaders.DtsTexture);
|
||||||
|
dtsTex.passThrough = true;
|
||||||
|
material.mainPass.removeShader(material.textureShader);
|
||||||
|
material.mainPass.addShader(shader);
|
||||||
|
var thisprops:Dynamic = material.getDefaultProps();
|
||||||
|
thisprops.light = false; // We will calculate our own lighting
|
||||||
|
material.props = thisprops;
|
||||||
|
material.shadows = false;
|
||||||
|
material.receiveShadows = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue