mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
blast wave
This commit is contained in:
parent
56e2180be8
commit
d531000e69
5 changed files with 261 additions and 13 deletions
|
|
@ -1251,6 +1251,31 @@ class DtsObject extends GameObject {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sequence.flags & 4 > 0) { // Arbitrary scales
|
||||
for (i in 0...this.dts.nodes.length) {
|
||||
var affected = ((1 << i) & scale) != 0;
|
||||
|
||||
if (affected) {
|
||||
var scale1 = this.dts.nodeArbitraryScaleFactors[sequence.baseScale + sequence.numKeyFrames * affectedCount + keyframeLow];
|
||||
var scale2 = this.dts.nodeArbitraryScaleFactors[sequence.baseScale + sequence.numKeyFrames * affectedCount + keyframeHigh];
|
||||
|
||||
var v1 = new Vector(scale1.x, scale1.y, scale1.z);
|
||||
var v2 = new Vector(scale2.x, scale2.y, scale2.z);
|
||||
|
||||
var scaleVec = Util.lerpThreeVectors(v1, v2, t);
|
||||
this.graphNodes[i].scaleX = scaleVec.x;
|
||||
this.graphNodes[i].scaleY = scaleVec.y;
|
||||
this.graphNodes[i].scaleZ = scaleVec.z;
|
||||
affectedCount++;
|
||||
propagateDirtyFlags(i);
|
||||
} else {
|
||||
this.graphNodes[i].scaleX = 1;
|
||||
this.graphNodes[i].scaleY = 1;
|
||||
this.graphNodes[i].scaleZ = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
affectedCount = 0;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package src;
|
||||
|
||||
import shapes.HelicopterImage;
|
||||
import shapes.BlastWave;
|
||||
import collision.CollisionHull;
|
||||
import dif.Plane;
|
||||
import shaders.marble.ClassicGlass;
|
||||
|
|
@ -233,11 +235,13 @@ class Marble extends GameObject {
|
|||
public var lastContactNormal:Vector;
|
||||
|
||||
var forcefield:DtsObject;
|
||||
var helicopter:DtsObject;
|
||||
var helicopter:HelicopterImage;
|
||||
var blastWave:BlastWave;
|
||||
var superBounceEnableTime:Float = -1e8;
|
||||
var shockAbsorberEnableTime:Float = -1e8;
|
||||
var helicopterEnableTime:Float = -1e8;
|
||||
var megaMarbleEnableTime:Float = -1e8;
|
||||
var blastUseTime:Float = -1e8;
|
||||
|
||||
var teleportEnableTime:Null<Float> = null;
|
||||
var teleportDisableTime:Null<Float> = null;
|
||||
|
|
@ -436,6 +440,13 @@ class Marble extends GameObject {
|
|||
// marbleMaterial.mainPass.addShader(new MarbleReflection(this.cubemapRenderer.cubemap));
|
||||
// }
|
||||
|
||||
this.blastWave = new BlastWave();
|
||||
// this.addChild(this.blastWave);
|
||||
this.blastWave.x = 1e8;
|
||||
this.blastWave.y = 1e8;
|
||||
this.blastWave.z = 1e8;
|
||||
this.blastWave.isBoundingBoxCollideable = false;
|
||||
|
||||
this.forcefield = new DtsObject();
|
||||
this.forcefield.dtsPath = "data/shapes/images/glow_bounce.dts";
|
||||
this.forcefield.useInstancing = true;
|
||||
|
|
@ -447,20 +458,18 @@ class Marble extends GameObject {
|
|||
this.forcefield.z = 1e8;
|
||||
this.forcefield.isBoundingBoxCollideable = false;
|
||||
|
||||
this.helicopter = new DtsObject();
|
||||
this.helicopter.dtsPath = "data/shapes/images/helicopter_image.dts";
|
||||
this.helicopter.useInstancing = true;
|
||||
this.helicopter.identifier = "HelicopterImage";
|
||||
this.helicopter.showSequences = true;
|
||||
this.helicopter = new HelicopterImage();
|
||||
this.helicopter.isBoundingBoxCollideable = false;
|
||||
// this.addChild(this.helicopter);
|
||||
this.helicopter.x = 1e8;
|
||||
this.helicopter.y = 1e8;
|
||||
this.helicopter.z = 1e8;
|
||||
this.helicopter.scale(0.3 / 0.2);
|
||||
|
||||
var worker = new ResourceLoaderWorker(onFinish);
|
||||
worker.addTask(fwd -> level.addDtsObject(this.forcefield, fwd));
|
||||
worker.addTask(fwd -> level.addDtsObject(this.helicopter, fwd));
|
||||
worker.addTask(fwd -> level.addDtsObject(this.blastWave, fwd));
|
||||
worker.run();
|
||||
}
|
||||
|
||||
|
|
@ -1867,6 +1876,12 @@ class Marble extends GameObject {
|
|||
this.helicopter.setPosition(1e8, 1e8, 1e8);
|
||||
this.helicopterSound.pause = true;
|
||||
}
|
||||
if (currentTime - this.blastUseTime < this.blastWave.dts.sequences[0].duration) {
|
||||
this.blastWave.setPosition(x, y, z);
|
||||
this.blastWave.setRotationQuat(this.level.getOrientationQuat(this.level.timeState.currentAttemptTime));
|
||||
} else {
|
||||
this.blastWave.setPosition(1e8, 1e8, 1e8);
|
||||
}
|
||||
}
|
||||
|
||||
public function useBlast() {
|
||||
|
|
@ -1875,12 +1890,8 @@ class Marble extends GameObject {
|
|||
var impulse = this.level.currentUp.multiply(Math.max(Math.sqrt(this.level.blastAmount), this.level.blastAmount) * 10);
|
||||
this.applyImpulse(impulse);
|
||||
AudioManager.playSound(ResourceLoader.getResource('data/sound/use_blast.wav', ResourceLoader.getAudio, this.soundResources));
|
||||
this.level.particleManager.createEmitter(this.level.blastAmount > 1 ? blastMaxParticleOptions : blastParticleOptions,
|
||||
this.level.blastAmount > 1 ? blastMaxEmitterData : blastEmitterData, this.getAbsPos().getPosition(), () -> {
|
||||
this.getAbsPos().getPosition().add(this.level.currentUp.multiply(-this._radius * 0.4));
|
||||
},
|
||||
new Vector(1, 1,
|
||||
1).add(new Vector(Math.abs(this.level.currentUp.x), Math.abs(this.level.currentUp.y), Math.abs(this.level.currentUp.z)).multiply(-0.8)));
|
||||
this.blastWave.doSequenceOnceBeginTime = this.level.timeState.timeSinceLoad;
|
||||
this.blastUseTime = this.level.timeState.currentAttemptTime;
|
||||
this.level.blastAmount = 0;
|
||||
}
|
||||
|
||||
|
|
@ -1946,6 +1957,7 @@ class Marble extends GameObject {
|
|||
this.shockAbsorberEnableTime = Math.NEGATIVE_INFINITY;
|
||||
this.helicopterEnableTime = Math.NEGATIVE_INFINITY;
|
||||
this.megaMarbleEnableTime = Math.NEGATIVE_INFINITY;
|
||||
this.blastUseTime = Math.NEGATIVE_INFINITY;
|
||||
this.lastContactNormal = new Vector(0, 0, 1);
|
||||
this.contactEntities = [];
|
||||
this.cloak = false;
|
||||
|
|
|
|||
|
|
@ -479,7 +479,7 @@ class PlayGui {
|
|||
|
||||
blastBar.addChild(blastFillUltra);
|
||||
|
||||
blastFrame = new GuiImage(ResourceLoader.getResource("data/ui/game/powerbar.png", ResourceLoader.getImage, this.imageResources).toTile());
|
||||
blastFrame = new GuiImage(ResourceLoader.getResource("data/ui/game/pc/powerbar.png", ResourceLoader.getImage, this.imageResources).toTile());
|
||||
blastFrame.position = new Vector(0, 0);
|
||||
blastFrame.extent = new Vector(170, 83);
|
||||
blastFrame.xScale = (scene2d.height - 82 * 2) / 480;
|
||||
|
|
|
|||
172
src/shapes/BlastWave.hx
Normal file
172
src/shapes/BlastWave.hx
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
package shapes;
|
||||
|
||||
import h3d.mat.Material;
|
||||
import src.DtsObject;
|
||||
import src.ResourceLoader;
|
||||
|
||||
class BlastWave extends DtsObject {
|
||||
public function new() {
|
||||
super();
|
||||
this.dtsPath = "data/shapes/images/distort.dts";
|
||||
this.isCollideable = false;
|
||||
this.isTSStatic = false;
|
||||
this.identifier = "BlastWave";
|
||||
this.useInstancing = true;
|
||||
this.animateSubObjectOpacities = true;
|
||||
this.doSequenceOnce = true;
|
||||
}
|
||||
|
||||
public override function init(level:src.MarbleWorld, onFinish:() -> Void) {
|
||||
super.init(level, onFinish);
|
||||
}
|
||||
|
||||
override function update(timeState:src.TimeState) {
|
||||
super.update(timeState);
|
||||
}
|
||||
|
||||
override function postProcessMaterial(matName:String, material:Material) {
|
||||
if (matName == "refract") {
|
||||
var diffuseTex = ResourceLoader.getTexture("data/shapes/images/blast_glow.png").resource;
|
||||
diffuseTex.wrap = Repeat;
|
||||
diffuseTex.mipMap = Nearest;
|
||||
// aa
|
||||
var trivialShader = new shaders.TrivialMaterial(diffuseTex);
|
||||
material.mainPass.removeShader(material.textureShader);
|
||||
var glowpass = material.mainPass.clone();
|
||||
|
||||
glowpass.addShader(trivialShader);
|
||||
var dtsshader = glowpass.getShader(shaders.DtsTexture);
|
||||
dtsshader.passThrough = true;
|
||||
glowpass.setPassName("glow");
|
||||
glowpass.depthTest = LessEqual;
|
||||
glowpass.depthWrite = false;
|
||||
glowpass.enableLights = false;
|
||||
glowpass.setBlendMode(Alpha);
|
||||
// glowpass.blendSrc = SrcAlpha;
|
||||
// glowpass.blendDst = OneMinusSrcAlpha;
|
||||
material.addPass(glowpass);
|
||||
|
||||
material.mainPass.setPassName("glowPreNoRender");
|
||||
material.mainPass.removeShader(material.textureShader);
|
||||
material.mainPass.addShader(trivialShader);
|
||||
dtsshader = material.mainPass.getShader(shaders.DtsTexture);
|
||||
dtsshader.passThrough = true;
|
||||
material.mainPass.enableLights = false;
|
||||
|
||||
// var thisprops:Dynamic = material.getDefaultProps();
|
||||
// thisprops.light = false; // We will calculate our own lighting
|
||||
// material.props = thisprops;
|
||||
material.shadows = false;
|
||||
// material.blendMode = Alpha;
|
||||
material.mainPass.depthWrite = false;
|
||||
}
|
||||
|
||||
if (matName == "blastwave") {
|
||||
var diffuseTex = ResourceLoader.getTexture("data/shapes/images/blastwave.png").resource;
|
||||
diffuseTex.wrap = Repeat;
|
||||
diffuseTex.mipMap = Nearest;
|
||||
// aa
|
||||
var trivialShader = new shaders.TrivialMaterial(diffuseTex);
|
||||
material.mainPass.removeShader(material.textureShader);
|
||||
var glowpass = material.mainPass.clone();
|
||||
|
||||
glowpass.addShader(trivialShader);
|
||||
var dtsshader = glowpass.getShader(shaders.DtsTexture);
|
||||
dtsshader.passThrough = true;
|
||||
glowpass.setPassName("glow");
|
||||
glowpass.depthTest = LessEqual;
|
||||
glowpass.depthWrite = false;
|
||||
glowpass.enableLights = false;
|
||||
glowpass.setBlendMode(Alpha);
|
||||
// glowpass.blendSrc = SrcAlpha;
|
||||
// glowpass.blendDst = OneMinusSrcAlpha;
|
||||
material.addPass(glowpass);
|
||||
|
||||
material.mainPass.setPassName("glowPreNoRender");
|
||||
material.mainPass.removeShader(material.textureShader);
|
||||
material.mainPass.addShader(trivialShader);
|
||||
dtsshader = material.mainPass.getShader(shaders.DtsTexture);
|
||||
dtsshader.passThrough = true;
|
||||
material.mainPass.enableLights = false;
|
||||
|
||||
// var thisprops:Dynamic = material.getDefaultProps();
|
||||
// thisprops.light = false; // We will calculate our own lighting
|
||||
// material.props = thisprops;
|
||||
material.shadows = false;
|
||||
// material.blendMode = Alpha;
|
||||
material.mainPass.depthWrite = false;
|
||||
}
|
||||
|
||||
if (matName == "endpad_glow") {
|
||||
var diffuseTex = ResourceLoader.getTexture("data/shapes/pads/endpad_glow.png").resource;
|
||||
diffuseTex.wrap = Repeat;
|
||||
diffuseTex.mipMap = Nearest;
|
||||
// aa
|
||||
var trivialShader = new shaders.TrivialMaterial(diffuseTex);
|
||||
material.mainPass.removeShader(material.textureShader);
|
||||
var glowpass = material.mainPass.clone();
|
||||
|
||||
glowpass.addShader(trivialShader);
|
||||
var dtsshader = glowpass.getShader(shaders.DtsTexture);
|
||||
dtsshader.passThrough = true;
|
||||
glowpass.setPassName("glow");
|
||||
glowpass.depthTest = LessEqual;
|
||||
glowpass.depthWrite = false;
|
||||
glowpass.enableLights = false;
|
||||
glowpass.setBlendMode(Alpha);
|
||||
// glowpass.blendSrc = SrcAlpha;
|
||||
// glowpass.blendDst = OneMinusSrcAlpha;
|
||||
material.addPass(glowpass);
|
||||
|
||||
material.mainPass.setPassName("glowPreNoRender");
|
||||
material.mainPass.removeShader(material.textureShader);
|
||||
material.mainPass.addShader(trivialShader);
|
||||
dtsshader = material.mainPass.getShader(shaders.DtsTexture);
|
||||
dtsshader.passThrough = true;
|
||||
material.mainPass.enableLights = false;
|
||||
|
||||
// var thisprops:Dynamic = material.getDefaultProps();
|
||||
// thisprops.light = false; // We will calculate our own lighting
|
||||
// material.props = thisprops;
|
||||
material.shadows = false;
|
||||
// material.blendMode = Alpha;
|
||||
material.mainPass.depthWrite = false;
|
||||
}
|
||||
|
||||
if (matName == "corona") {
|
||||
var diffuseTex = ResourceLoader.getTexture("data/shapes/images/corona.png").resource;
|
||||
diffuseTex.wrap = Repeat;
|
||||
diffuseTex.mipMap = Nearest;
|
||||
// aa
|
||||
var trivialShader = new shaders.TrivialMaterial(diffuseTex);
|
||||
material.mainPass.removeShader(material.textureShader);
|
||||
var glowpass = material.mainPass.clone();
|
||||
|
||||
glowpass.addShader(trivialShader);
|
||||
var dtsshader = glowpass.getShader(shaders.DtsTexture);
|
||||
dtsshader.passThrough = true;
|
||||
glowpass.setPassName("glow");
|
||||
glowpass.depthTest = LessEqual;
|
||||
glowpass.depthWrite = false;
|
||||
glowpass.enableLights = false;
|
||||
glowpass.setBlendMode(Alpha);
|
||||
// glowpass.blendSrc = SrcAlpha;
|
||||
// glowpass.blendDst = OneMinusSrcAlpha;
|
||||
material.addPass(glowpass);
|
||||
|
||||
material.mainPass.setPassName("glowPreNoRender");
|
||||
material.mainPass.removeShader(material.textureShader);
|
||||
material.mainPass.addShader(trivialShader);
|
||||
dtsshader = material.mainPass.getShader(shaders.DtsTexture);
|
||||
dtsshader.passThrough = true;
|
||||
material.mainPass.enableLights = false;
|
||||
|
||||
// var thisprops:Dynamic = material.getDefaultProps();
|
||||
// thisprops.light = false; // We will calculate our own lighting
|
||||
// material.props = thisprops;
|
||||
material.shadows = false;
|
||||
// material.blendMode = Alpha;
|
||||
material.mainPass.depthWrite = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
39
src/shapes/HelicopterImage.hx
Normal file
39
src/shapes/HelicopterImage.hx
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
package shapes;
|
||||
|
||||
import h3d.mat.Material;
|
||||
import src.DtsObject;
|
||||
import src.ResourceLoader;
|
||||
|
||||
class HelicopterImage extends DtsObject {
|
||||
public function new() {
|
||||
super();
|
||||
this.dtsPath = "data/shapes/images/helicopter_image.dts";
|
||||
this.isCollideable = false;
|
||||
this.isTSStatic = false;
|
||||
this.identifier = "HelicopterImage";
|
||||
this.useInstancing = true;
|
||||
}
|
||||
|
||||
public override function init(level:src.MarbleWorld, onFinish:() -> Void) {
|
||||
super.init(level, onFinish);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue