make it work on js again

This commit is contained in:
RandomityGuy 2023-06-28 21:30:12 +05:30
parent 13ab96f7b6
commit 3a472eed1d
3 changed files with 193 additions and 163 deletions

View file

@ -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) {

View file

@ -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");

View file

@ -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;
}