mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2026-02-04 05:15:56 +00:00
make it work on js again
This commit is contained in:
parent
13ab96f7b6
commit
3a472eed1d
3 changed files with 193 additions and 163 deletions
314
src/Marble.hx
314
src/Marble.hx
|
|
@ -327,173 +327,183 @@ class Marble extends GameObject {
|
|||
marbleDts.matNameOverride.set("base.marble", Settings.optionsSettings.marbleSkin + ".marble");
|
||||
marbleDts.showSequences = false;
|
||||
marbleDts.useInstancing = false;
|
||||
marbleDts.init(null, () -> {}); // SYNC
|
||||
for (mat in marbleDts.materials) {
|
||||
mat.castShadows = true;
|
||||
mat.shadows = true;
|
||||
mat.receiveShadows = false;
|
||||
// mat.mainPass.culling = None;
|
||||
var dtsFile = ResourceLoader.loadDts(marbleDts.dtsPath).resource;
|
||||
var marbleMats = marbleDts.getPreloadMaterials(dtsFile);
|
||||
var matWorker = new ResourceLoaderWorker(() -> {
|
||||
marbleDts.init(null, () -> {}); // SYNC
|
||||
for (mat in marbleDts.materials) {
|
||||
mat.castShadows = true;
|
||||
mat.shadows = true;
|
||||
mat.receiveShadows = false;
|
||||
// mat.mainPass.culling = None;
|
||||
|
||||
if (Settings.optionsSettings.reflectiveMarble) {
|
||||
var csky = level != null ? level.sky : (@:privateAccess MarbleGame.instance.previewWorld.sky);
|
||||
this.cubemapRenderer = new CubemapRenderer(MarbleGame.instance.scene, csky);
|
||||
if (Settings.optionsSettings.reflectiveMarble) {
|
||||
var csky = level != null ? level.sky : (@:privateAccess MarbleGame.instance.previewWorld.sky);
|
||||
this.cubemapRenderer = new CubemapRenderer(MarbleGame.instance.scene, csky);
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == null
|
||||
|| Settings.optionsSettings.marbleShader == "Default"
|
||||
|| Settings.optionsSettings.marbleShader == ""
|
||||
|| !isUltra) { // Use this shit everywhere except ultra
|
||||
mat.mainPass.addShader(new MarbleReflection(this.cubemapRenderer.cubemap));
|
||||
} else {
|
||||
// Generate tangents for next shaders, only for Ultra
|
||||
for (node in marbleDts.graphNodes) {
|
||||
for (chmesh in node.getMeshes()) {
|
||||
var chpoly = cast(chmesh.primitive, mesh.Polygon);
|
||||
chpoly.addTangents();
|
||||
if (Settings.optionsSettings.marbleShader == null
|
||||
|| Settings.optionsSettings.marbleShader == "Default"
|
||||
|| Settings.optionsSettings.marbleShader == ""
|
||||
|| !isUltra) { // Use this shit everywhere except ultra
|
||||
mat.mainPass.addShader(new MarbleReflection(this.cubemapRenderer.cubemap));
|
||||
} else {
|
||||
// Generate tangents for next shaders, only for Ultra
|
||||
for (node in marbleDts.graphNodes) {
|
||||
for (chmesh in node.getMeshes()) {
|
||||
var chpoly = cast(chmesh.primitive, mesh.Polygon);
|
||||
chpoly.addTangents();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mat.mainPass.removeShader(mat.textureShader);
|
||||
mat.mainPass.removeShader(mat.textureShader);
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicGlassPureSphere") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble01.normal.png").resource;
|
||||
var classicGlassShader = new ClassicGlassPureSphere(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12,
|
||||
new Vector(0.6, 0.6, 0.6, 0.6), 1);
|
||||
mat.mainPass.addShader(classicGlassShader);
|
||||
}
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarb") {
|
||||
var classicMarb = new ClassicMarb(mat.texture, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), 1);
|
||||
mat.mainPass.addShader(classicMarb);
|
||||
}
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarb2") {
|
||||
var classicMarb2 = new ClassicMarb2(mat.texture, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), 1);
|
||||
mat.mainPass.addShader(classicMarb2);
|
||||
}
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarb3") {
|
||||
var marbSpecColor = new Vector(0.6, 0.6, 0.6, 0.6);
|
||||
var marbSpec = 12.0;
|
||||
if (Settings.optionsSettings.marbleModel == "data/shapes/balls/marble16.dts") {
|
||||
marbSpec = 6;
|
||||
marbSpecColor.set(0.2, 0.2, 0.2, 0.2);
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicGlassPureSphere") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble01.normal.png").resource;
|
||||
var classicGlassShader = new ClassicGlassPureSphere(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12,
|
||||
new Vector(0.6, 0.6, 0.6, 0.6), 1);
|
||||
mat.mainPass.addShader(classicGlassShader);
|
||||
}
|
||||
if (Settings.optionsSettings.marbleModel == "data/shapes/balls/marble31.dts") {
|
||||
marbSpec = 24;
|
||||
marbSpecColor.set(0.3, 0.3, 0.3, 0.3);
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarb") {
|
||||
var classicMarb = new ClassicMarb(mat.texture, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), 1);
|
||||
mat.mainPass.addShader(classicMarb);
|
||||
}
|
||||
var classicMarb3 = new ClassicMarb3(mat.texture, this.cubemapRenderer.cubemap, marbSpec, marbSpecColor, 1);
|
||||
mat.mainPass.addShader(classicMarb3);
|
||||
}
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMetal") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble18.normal.png").resource;
|
||||
marbleNormal.wrap = Repeat;
|
||||
var classicMetalShader = new ClassicMetal(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6),
|
||||
1);
|
||||
mat.mainPass.addShader(classicMetalShader);
|
||||
}
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarb2") {
|
||||
var classicMarb2 = new ClassicMarb2(mat.texture, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), 1);
|
||||
mat.mainPass.addShader(classicMarb2);
|
||||
}
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarbGlass20") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble20.normal.png").resource;
|
||||
marbleNormal.wrap = Repeat;
|
||||
var classicGlassShader = new ClassicGlass(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6),
|
||||
1);
|
||||
mat.mainPass.addShader(classicGlassShader);
|
||||
}
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarb3") {
|
||||
var marbSpecColor = new Vector(0.6, 0.6, 0.6, 0.6);
|
||||
var marbSpec = 12.0;
|
||||
if (Settings.optionsSettings.marbleModel == "data/shapes/balls/marble16.dts") {
|
||||
marbSpec = 6;
|
||||
marbSpecColor.set(0.2, 0.2, 0.2, 0.2);
|
||||
}
|
||||
if (Settings.optionsSettings.marbleModel == "data/shapes/balls/marble31.dts") {
|
||||
marbSpec = 24;
|
||||
marbSpecColor.set(0.3, 0.3, 0.3, 0.3);
|
||||
}
|
||||
var classicMarb3 = new ClassicMarb3(mat.texture, this.cubemapRenderer.cubemap, marbSpec, marbSpecColor, 1);
|
||||
mat.mainPass.addShader(classicMarb3);
|
||||
}
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarbGlass18") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble18.normal.png").resource;
|
||||
marbleNormal.wrap = Repeat;
|
||||
var classicGlassShader = new ClassicGlass(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6),
|
||||
1);
|
||||
mat.mainPass.addShader(classicGlassShader);
|
||||
}
|
||||
if (Settings.optionsSettings.marbleShader == "CrystalMarb") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble02.normal.png").resource;
|
||||
marbleNormal.wrap = Repeat;
|
||||
var classicGlassShader = new CrystalMarb(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 1);
|
||||
mat.mainPass.addShader(classicGlassShader);
|
||||
}
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMetal") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble18.normal.png").resource;
|
||||
marbleNormal.wrap = Repeat;
|
||||
var classicMetalShader = new ClassicMetal(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12,
|
||||
new Vector(0.6, 0.6, 0.6, 0.6), 1);
|
||||
mat.mainPass.addShader(classicMetalShader);
|
||||
}
|
||||
|
||||
var thisprops:Dynamic = mat.getDefaultProps();
|
||||
thisprops.light = false; // We will calculate our own lighting
|
||||
mat.props = thisprops;
|
||||
mat.castShadows = true;
|
||||
mat.shadows = true;
|
||||
mat.receiveShadows = false;
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarbGlass20") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble20.normal.png").resource;
|
||||
marbleNormal.wrap = Repeat;
|
||||
var classicGlassShader = new ClassicGlass(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12,
|
||||
new Vector(0.6, 0.6, 0.6, 0.6), 1);
|
||||
mat.mainPass.addShader(classicGlassShader);
|
||||
}
|
||||
|
||||
if (Settings.optionsSettings.marbleShader == "ClassicMarbGlass18") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble18.normal.png").resource;
|
||||
marbleNormal.wrap = Repeat;
|
||||
var classicGlassShader = new ClassicGlass(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12,
|
||||
new Vector(0.6, 0.6, 0.6, 0.6), 1);
|
||||
mat.mainPass.addShader(classicGlassShader);
|
||||
}
|
||||
if (Settings.optionsSettings.marbleShader == "CrystalMarb") {
|
||||
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble02.normal.png").resource;
|
||||
marbleNormal.wrap = Repeat;
|
||||
var classicGlassShader = new CrystalMarb(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 1);
|
||||
mat.mainPass.addShader(classicGlassShader);
|
||||
}
|
||||
|
||||
var thisprops:Dynamic = mat.getDefaultProps();
|
||||
thisprops.light = false; // We will calculate our own lighting
|
||||
mat.props = thisprops;
|
||||
mat.castShadows = true;
|
||||
mat.shadows = true;
|
||||
mat.receiveShadows = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate radius according to marble model (egh)
|
||||
var b = marbleDts.getBounds();
|
||||
var avgRadius = (b.xSize + b.ySize + b.zSize) / 6;
|
||||
if (isUltra) {
|
||||
this._radius = 0.3;
|
||||
this._renderScale = 0.3 / avgRadius;
|
||||
this._marbleScale = this._renderScale;
|
||||
this._defaultScale = this._marbleScale;
|
||||
marbleDts.scale(0.3 / avgRadius);
|
||||
} else
|
||||
this._radius = avgRadius;
|
||||
|
||||
this._prevRadius = this._radius;
|
||||
|
||||
if (isUltra) {
|
||||
this.rollMegaSound = AudioManager.playSound(ResourceLoader.getResource("data/sound/mega_roll.wav", ResourceLoader.getAudio,
|
||||
this.soundResources), this.getAbsPos().getPosition(),
|
||||
true);
|
||||
this.rollMegaSound.volume = 0;
|
||||
}
|
||||
|
||||
this.isUltra = isUltra;
|
||||
|
||||
this.collider = new SphereCollisionEntity(cast this);
|
||||
this.collider.setTransform(this.getAbsPos());
|
||||
|
||||
this.addChild(marbleDts);
|
||||
|
||||
// var geom = Sphere.defaultUnitSphere();
|
||||
// geom.addUVs();
|
||||
// var marbleTexture = ResourceLoader.getFileEntry("data/shapes/balls/base.marble.png").toTexture();
|
||||
// var marbleMaterial = Material.create(marbleTexture);
|
||||
// marbleMaterial.shadows = false;
|
||||
// marbleMaterial.castShadows = true;
|
||||
// marbleMaterial.mainPass.removeShader(marbleMaterial.textureShader);
|
||||
// var dtsShader = new DtsTexture();
|
||||
// dtsShader.texture = marbleTexture;
|
||||
// dtsShader.currentOpacity = 1;
|
||||
// marbleMaterial.mainPass.addShader(dtsShader);
|
||||
// var obj = new Mesh(geom, marbleMaterial, this);
|
||||
// obj.scale(_radius * 0.1);
|
||||
// if (Settings.optionsSettings.reflectiveMarble) {
|
||||
// this.cubemapRenderer = new CubemapRenderer(level.scene);
|
||||
// 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.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);
|
||||
|
||||
if (this.controllable) {
|
||||
var worker = new ResourceLoaderWorker(onFinish);
|
||||
worker.addTask(fwd -> level.addDtsObject(this.helicopter, fwd));
|
||||
worker.addTask(fwd -> level.addDtsObject(this.blastWave, fwd));
|
||||
worker.run();
|
||||
} else {
|
||||
onFinish();
|
||||
}
|
||||
});
|
||||
for (texPath in marbleMats) {
|
||||
matWorker.loadFile(texPath);
|
||||
}
|
||||
|
||||
// Calculate radius according to marble model (egh)
|
||||
var b = marbleDts.getBounds();
|
||||
var avgRadius = (b.xSize + b.ySize + b.zSize) / 6;
|
||||
if (isUltra) {
|
||||
this._radius = 0.3;
|
||||
this._renderScale = 0.3 / avgRadius;
|
||||
this._marbleScale = this._renderScale;
|
||||
this._defaultScale = this._marbleScale;
|
||||
marbleDts.scale(0.3 / avgRadius);
|
||||
} else
|
||||
this._radius = avgRadius;
|
||||
|
||||
this._prevRadius = this._radius;
|
||||
|
||||
if (isUltra) {
|
||||
this.rollMegaSound = AudioManager.playSound(ResourceLoader.getResource("data/sound/mega_roll.wav", ResourceLoader.getAudio, this.soundResources),
|
||||
this.getAbsPos().getPosition(), true);
|
||||
this.rollMegaSound.volume = 0;
|
||||
}
|
||||
|
||||
this.isUltra = isUltra;
|
||||
|
||||
this.collider = new SphereCollisionEntity(cast this);
|
||||
this.collider.setTransform(this.getAbsPos());
|
||||
|
||||
this.addChild(marbleDts);
|
||||
|
||||
// var geom = Sphere.defaultUnitSphere();
|
||||
// geom.addUVs();
|
||||
// var marbleTexture = ResourceLoader.getFileEntry("data/shapes/balls/base.marble.png").toTexture();
|
||||
// var marbleMaterial = Material.create(marbleTexture);
|
||||
// marbleMaterial.shadows = false;
|
||||
// marbleMaterial.castShadows = true;
|
||||
// marbleMaterial.mainPass.removeShader(marbleMaterial.textureShader);
|
||||
// var dtsShader = new DtsTexture();
|
||||
// dtsShader.texture = marbleTexture;
|
||||
// dtsShader.currentOpacity = 1;
|
||||
// marbleMaterial.mainPass.addShader(dtsShader);
|
||||
// var obj = new Mesh(geom, marbleMaterial, this);
|
||||
// obj.scale(_radius * 0.1);
|
||||
// if (Settings.optionsSettings.reflectiveMarble) {
|
||||
// this.cubemapRenderer = new CubemapRenderer(level.scene);
|
||||
// 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.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);
|
||||
|
||||
if (this.controllable) {
|
||||
var worker = new ResourceLoaderWorker(onFinish);
|
||||
worker.addTask(fwd -> level.addDtsObject(this.helicopter, fwd));
|
||||
worker.addTask(fwd -> level.addDtsObject(this.blastWave, fwd));
|
||||
worker.run();
|
||||
} else {
|
||||
onFinish();
|
||||
}
|
||||
matWorker.run();
|
||||
}
|
||||
|
||||
function findContacts(collisiomWorld:CollisionWorld, timeState:TimeState) {
|
||||
|
|
|
|||
|
|
@ -225,11 +225,29 @@ class ResourceLoader {
|
|||
}
|
||||
|
||||
static function preloadShapes(onFinish:Void->Void) {
|
||||
// var toloadfiles = [
|
||||
// StringTools.replace(Settings.optionsSettings.marbleModel, "data/", ""),
|
||||
// (Settings.optionsSettings.marbleCategoryIndex == 0)
|
||||
// ? "shapes/balls/" + Settings.optionsSettings.marbleSkin + ".marble.png" : "shapes/balls/pack1/" + Settings.optionsSettings.marbleSkin +
|
||||
// ".marble.png"
|
||||
// ];
|
||||
var toloadfiles = [
|
||||
StringTools.replace(Settings.optionsSettings.marbleModel, "data/", ""),
|
||||
(Settings.optionsSettings.marbleCategoryIndex == 0)
|
||||
? "shapes/balls/" + Settings.optionsSettings.marbleSkin + ".marble.png" : "shapes/balls/pack1/" + Settings.optionsSettings.marbleSkin +
|
||||
".marble.png"
|
||||
"particles/star.png",
|
||||
"particles/smoke.png",
|
||||
"particles/burst.png",
|
||||
"sound/rolling_hard.wav",
|
||||
"sound/sliding.wav",
|
||||
"sound/use_gyrocopter.wav",
|
||||
"sound/bouncehard1.wav",
|
||||
"sound/bouncehard2.wav",
|
||||
"sound/bouncehard3.wav",
|
||||
"sound/bouncehard4.wav",
|
||||
"sound/mega_roll.wav",
|
||||
"shapes/balls/marble20.normal.png",
|
||||
"shapes/balls/marble18.normal.png",
|
||||
"shapes/balls/marble01.normal.png",
|
||||
"shapes/balls/marble02.normal.png",
|
||||
];
|
||||
// var toloaddirs = [];
|
||||
// var filestats = fileSystem.dir("shapes");
|
||||
|
|
|
|||
|
|
@ -302,14 +302,16 @@ class MarblePickerGui extends GuiImage {
|
|||
Settings.optionsSettings.marbleSkin = selectedMarble.skin;
|
||||
Settings.optionsSettings.marbleModel = selectedMarble.dts;
|
||||
Settings.optionsSettings.marbleShader = selectedMarble.shader;
|
||||
@:privateAccess MarbleGame.instance.previewWorld.removeMarble(myMarb);
|
||||
@:privateAccess MarbleGame.instance.previewWorld.spawnMarble(marb -> {
|
||||
var spawnPos = @:privateAccess MarbleGame.instance.scene.camera.pos.add(new Vector(0, 1, 1));
|
||||
var velAdd = new Vector((1 - 2 * Math.random()) * 2, (1 - 2 * Math.random()) * 1.5, (1 - 2 * Math.random()) * 1);
|
||||
velAdd = velAdd.add(new Vector(0, 3, 0));
|
||||
marb.setMarblePosition(spawnPos.x, spawnPos.y, spawnPos.z);
|
||||
marb.velocity.load(velAdd);
|
||||
myMarb = marb;
|
||||
ResourceLoader.load(Settings.optionsSettings.marbleModel).entry.load(() -> {
|
||||
@:privateAccess MarbleGame.instance.previewWorld.removeMarble(myMarb);
|
||||
@:privateAccess MarbleGame.instance.previewWorld.spawnMarble(marb -> {
|
||||
var spawnPos = @:privateAccess MarbleGame.instance.scene.camera.pos.add(new Vector(0, 1, 1));
|
||||
var velAdd = new Vector((1 - 2 * Math.random()) * 2, (1 - 2 * Math.random()) * 1.5, (1 - 2 * Math.random()) * 1);
|
||||
velAdd = velAdd.add(new Vector(0, 3, 0));
|
||||
marb.setMarblePosition(spawnPos.x, spawnPos.y, spawnPos.z);
|
||||
marb.velocity.load(velAdd);
|
||||
myMarb = marb;
|
||||
});
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue