From ad332ce3488af91fe4b045f064eefa4a81b08eae Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Fri, 29 Sep 2023 22:57:51 +0530 Subject: [PATCH] updated marbleland support --- src/DifBuilder.hx | 6 ++-- src/Macros.hx | 4 +-- src/MarbleWorld.hx | 2 +- src/Marbleland.hx | 72 ++++++++++++++++-------------------------- src/shapes/LandMine.hx | 20 ++++++++++++ 5 files changed, 53 insertions(+), 51 deletions(-) diff --git a/src/DifBuilder.hx b/src/DifBuilder.hx index f5817d4b..0e558253 100644 --- a/src/DifBuilder.hx +++ b/src/DifBuilder.hx @@ -241,8 +241,7 @@ class DifBuilder { } static var shaderMaterialDict:MapVoid)->Void> = [ - 'interiors_mbu/plate_1.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'plate.randomize.png', 'plate.normal.png', 8, new Vector(1, 1, 0.8, 1), - 0.5), + 'interiors_mbu/plate_1.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'plate.randomize.png', 'plate.normal.png', 8, new Vector(1, 1, 0.8, 1), 0.5), 'interiors_mbu/tile_beginner.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '', 40, new Vector(1, 1, 1, 1)), 'interiors_mbu/tile_beginner_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_shadow', 40, new Vector(0.2, 0.2, 0.2, 0.2)), @@ -280,8 +279,7 @@ class DifBuilder { 'interiors_mbu/edge_white_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'edge_white_shadow.png', 'edge.normal.png', 50, new Vector(0.2, 0.2, 0.2, 0.2)), 'interiors_mbu/beam.png' => (onFinish) -> createPhongMaterial(onFinish, 'beam.png', 'beam.normal.png', 12, new Vector(0.8, 0.8, 0.6, 1)), - 'interiors_mbu/beam_side.png' => (onFinish) -> createPhongMaterial(onFinish, 'beam_side.png', 'beam_side.normal.png', 12, - new Vector(0.8, 0.8, 0.6, 1)), + 'interiors_mbu/beam_side.png' => (onFinish) -> createPhongMaterial(onFinish, 'beam_side.png', 'beam_side.normal.png', 12, new Vector(0.8, 0.8, 0.6, 1)), 'interiors_mbu/friction_low.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low.png', 'friction_low.normal.png', 128, new Vector(1, 1, 1, 0.8)), 'interiors_mbu/friction_low.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low.png', 'friction_low.normal.png', 128, diff --git a/src/Macros.hx b/src/Macros.hx index fe41c1d3..119d78cd 100644 --- a/src/Macros.hx +++ b/src/Macros.hx @@ -56,9 +56,9 @@ class MarbleWorldMacros { // Add the correct shape based on type var dataBlockLowerCase = element.datablock.toLowerCase(); if (dataBlockLowerCase == "") {} // Make sure we don't do anything if there's no data block - else if (dataBlockLowerCase == "startpad") + else if (["startpad", "startpad_mbg", "startpad_mbp"].contains(dataBlockLowerCase)) shape = new StartPad(); - else if (dataBlockLowerCase == "endpad") { + else if (["endpad", "endpad_mbg", "endpad_mbp"].contains(dataBlockLowerCase)) { shape = new EndPad(); if (element is MissionElementStaticShape && cast(element, MissionElementStaticShape) == endPadElement) endPad = cast shape; diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index ec63c8e2..e9f51c4a 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -249,7 +249,7 @@ class MarbleWorld extends Scheduler { // Override the end pad element. We do this because only the last finish pad element will actually do anything. if (element._type == MissionElementType.StaticShape) { var so:MissionElementStaticShape = cast element; - if (so.datablock.toLowerCase() == 'endpad') + if (["endpad", "endpad_mbg", "endpad_mbp"].contains(so.datablock.toLowerCase())) this.endPadElement = so; } diff --git a/src/Marbleland.hx b/src/Marbleland.hx index fd923d7e..33c94a40 100644 --- a/src/Marbleland.hx +++ b/src/Marbleland.hx @@ -16,31 +16,18 @@ class Marbleland { public static var missions:Map = []; public static function init() { - Http.get('https://raw.githubusercontent.com/Vanilagy/MarbleBlast/master/src/assets/customs_gold.json', (b) -> { - parseMissionList(b.toString(), "gold"); + Http.get('https://marbleblast.vaniverse.io/api/customs', (b) -> { + parseMissionList(b.toString()); Console.log('Loaded gold customs: ${goldMissions.length}'); - }, (e) -> {}); - Http.get('https://raw.githubusercontent.com/Vanilagy/MarbleBlast/master/src/assets/customs_ultra.json', (b) -> { - parseMissionList(b.toString(), "ultra"); Console.log('Loaded ultra customs: ${ultraMissions.length}'); - }, (e) -> {}); - Http.get('https://raw.githubusercontent.com/Vanilagy/MarbleBlast/master/src/assets/customs_platinum.json', (b) -> { - parseMissionList(b.toString(), "platinum"); Console.log('Loaded platinum customs: ${platinumMissions.length}'); - }, (e) -> {}); + }, (e) -> { + Console.log('Error getting custom list from marbleland.'); + }); } - static function parseMissionList(s:String, game:String) { + static function parseMissionList(s:String) { var claJson:Array = Json.parse(s); - if (game == 'gold') { - claJson = claJson.filter(x -> x.modification == 'gold'); - } - if (game == 'platinum') { - claJson = claJson.filter(x -> x.gameType == 'single' && (x.gameMode == null || x.gameMode == 'null' || x.gamemode == '')); - } - if (game == 'ultra') { - claJson = claJson.filter(x -> x.gameType == 'single'); - } var platDupes = new Map(); for (missionData in claJson) { @@ -63,6 +50,8 @@ class Marbleland { mission.hasEgg = missionData.hasEgg; mission.isClaMission = true; + var game = missionData.modification; + if (game == 'platinum') { if (platDupes.exists(mission.title + mission.description)) continue; @@ -83,32 +72,27 @@ class Marbleland { } // sort according to name - switch (game) { - case 'gold': - goldMissions.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); - for (i in 0...goldMissions.length - 1) { - @:privateAccess goldMissions[i].next = goldMissions[i + 1]; - goldMissions[i].index = i; - } - @:privateAccess goldMissions[goldMissions.length - 1].next = goldMissions[0]; - goldMissions[goldMissions.length - 1].index = goldMissions.length - 1; - case 'platinum': - platinumMissions.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); - for (i in 0...platinumMissions.length - 1) { - @:privateAccess platinumMissions[i].next = platinumMissions[i + 1]; - platinumMissions[i].index = i; - } - @:privateAccess platinumMissions[platinumMissions.length - 1].next = platinumMissions[0]; - platinumMissions[platinumMissions.length - 1].index = platinumMissions.length - 1; - case 'ultra': - ultraMissions.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); - for (i in 0...ultraMissions.length - 1) { - @:privateAccess ultraMissions[i].next = ultraMissions[i + 1]; - ultraMissions[i].index = i; - } - @:privateAccess ultraMissions[ultraMissions.length - 1].next = ultraMissions[0]; - ultraMissions[ultraMissions.length - 1].index = ultraMissions.length - 1; + goldMissions.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); + for (i in 0...goldMissions.length - 1) { + @:privateAccess goldMissions[i].next = goldMissions[i + 1]; + goldMissions[i].index = i; } + @:privateAccess goldMissions[goldMissions.length - 1].next = goldMissions[0]; + goldMissions[goldMissions.length - 1].index = goldMissions.length - 1; + platinumMissions.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); + for (i in 0...platinumMissions.length - 1) { + @:privateAccess platinumMissions[i].next = platinumMissions[i + 1]; + platinumMissions[i].index = i; + } + @:privateAccess platinumMissions[platinumMissions.length - 1].next = platinumMissions[0]; + platinumMissions[platinumMissions.length - 1].index = platinumMissions.length - 1; + ultraMissions.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); + for (i in 0...ultraMissions.length - 1) { + @:privateAccess ultraMissions[i].next = ultraMissions[i + 1]; + ultraMissions[i].index = i; + } + @:privateAccess ultraMissions[ultraMissions.length - 1].next = ultraMissions[0]; + ultraMissions[ultraMissions.length - 1].index = ultraMissions.length - 1; } public static function getMissionImage(id:Int, cb:Image->Void) { diff --git a/src/shapes/LandMine.hx b/src/shapes/LandMine.hx index 92154ee6..b6b20c18 100644 --- a/src/shapes/LandMine.hx +++ b/src/shapes/LandMine.hx @@ -11,6 +11,7 @@ import src.ParticleSystem.ParticleData; import h3d.Vector; import src.ResourceLoader; import src.MarbleWorld; +import src.MarbleGame; final landMineParticle:ParticleEmitterOptions = { ejectionPeriod: 2, @@ -96,6 +97,8 @@ class LandMine extends DtsObject { var landMineSmokeParticleData:ParticleData; var landMineSparkParticleData:ParticleData; + var light:h3d.scene.fwd.PointLight; + public function new() { super(); dtsPath = "data/shapes/hazards/landmine.dts"; @@ -142,6 +145,10 @@ class LandMine extends DtsObject { var impulse = off.normalized().multiply(strength); marble.applyImpulse(impulse); + // light = new h3d.scene.fwd.PointLight(MarbleGame.instance.scene); + // light.setPosition(minePos.x, minePos.y, minePos.z); + // light.enableSpecular = false; + // for (collider in this.colliders) { // var hull:CollisionHull = cast collider; // hull.force = strength; @@ -174,6 +181,19 @@ class LandMine extends DtsObject { this.setHide(true); } + // if (light != null) { + // var t = Util.clamp((timeState.timeSinceLoad - this.disappearTime) / 1.2, 0, 1); + + // light.color = Util.lerpThreeVectors(new Vector(0.5, 0.5, 0), new Vector(0, 0, 0), t); + // var radius = Util.lerp(6, 3, t); + // light.params = new Vector(0, 1 / radius, 0); + + // if (t >= 1) { + // light.remove(); + // light = null; + // } + // } + var opacity = Util.clamp((timeState.timeSinceLoad - (this.disappearTime + 5)), 0, 1); this.setOpacity(opacity); }