add mbu models

This commit is contained in:
RandomityGuy 2022-12-05 14:35:57 +05:30
parent e39420e8b1
commit 8980869082
9 changed files with 193 additions and 4 deletions

View file

@ -1,5 +1,8 @@
package src;
import shapes.MegaMarble;
import shapes.Blast;
import shapes.Glass;
import gui.OOBInsultGui;
import shapes.Checkpoint;
import triggers.CheckpointTrigger;
@ -297,6 +300,8 @@ class MarbleWorld extends Scheduler {
worker.loadFile(file);
}
this.scene.camera.zFar = Math.max(2000, Std.parseFloat(this.skyElement.visibledistance));
this.sky = new Sky();
sky.dmlPath = ResourceLoader.getProperFilepath(skyElement.materiallist);
@ -666,6 +671,8 @@ class MarbleWorld extends Scheduler {
shape = new Magnet();
else if (dataBlockLowerCase == "antigravityitem")
shape = new AntiGravity(cast element);
else if (dataBlockLowerCase == "norespawnantigravityitem")
shape = new AntiGravity(cast element, true);
else if (dataBlockLowerCase == "landmine")
shape = new LandMine();
else if (dataBlockLowerCase == "nuke")
@ -676,6 +683,10 @@ class MarbleWorld extends Scheduler {
shape = new SuperSpeed(cast element);
else if (dataBlockLowerCase == "timetravelitem" || dataBlockLowerCase == "timepenaltyitem")
shape = new TimeTravel(cast element);
else if (dataBlockLowerCase == "blast")
shape = new Blast(cast element);
else if (dataBlockLowerCase == "megamarble")
shape = new MegaMarble(cast element);
else if (dataBlockLowerCase == "tornado")
shape = new Tornado();
else if (dataBlockLowerCase == "trapdoor")
@ -684,6 +695,17 @@ class MarbleWorld extends Scheduler {
shape = new Oilslick();
else if (dataBlockLowerCase == "arrow" || StringTools.startsWith(dataBlockLowerCase, "sign"))
shape = new Sign(cast element);
else if ([
"glass_3shape",
"glass_6shape",
"glass_9shape",
"glass_12shape",
"glass_15shape",
"glass_18shape"
].contains(dataBlockLowerCase))
shape = new Glass(cast element);
else if (["clear", "cloudy", "dusk", "wintry"].contains(dataBlockLowerCase))
shape = new shapes.Sky(dataBlockLowerCase);
else {
onFinish();
return;
@ -762,6 +784,8 @@ class MarbleWorld extends Scheduler {
shape = new Magnet();
else if (dataBlockLowerCase == "antigravityitem")
shape = new AntiGravity(cast element);
else if (dataBlockLowerCase == "norespawnantigravityitem")
shape = new AntiGravity(cast element, true);
else if (dataBlockLowerCase == "landmine")
shape = new LandMine();
else if (dataBlockLowerCase == "nuke")
@ -772,6 +796,10 @@ class MarbleWorld extends Scheduler {
shape = new SuperSpeed(cast element);
else if (dataBlockLowerCase == "timetravelitem" || dataBlockLowerCase == "timepenaltyitem")
shape = new TimeTravel(cast element);
else if (dataBlockLowerCase == "blastitem")
shape = new Blast(cast element);
else if (dataBlockLowerCase == "megamarbleitem")
shape = new MegaMarble(cast element);
else if (dataBlockLowerCase == "tornado")
shape = new Tornado();
else if (dataBlockLowerCase == "trapdoor")
@ -780,6 +808,17 @@ class MarbleWorld extends Scheduler {
shape = new Oilslick();
else if (dataBlockLowerCase == "arrow" || StringTools.startsWith(dataBlockLowerCase, "sign"))
shape = new Sign(cast element);
else if ([
"glass_3shape",
"glass_6shape",
"glass_9shape",
"glass_12shape",
"glass_15shape",
"glass_18shape"
].contains(dataBlockLowerCase))
shape = new Glass(cast element);
else if (["clear", "cloudy", "dusk", "wintry"].contains(dataBlockLowerCase))
shape = new shapes.Sky(dataBlockLowerCase);
else {
onFinish();
return;

View file

@ -57,6 +57,7 @@ class MissionList {
var goldMissions:Map<String, Array<Mission>> = [];
var platinumMissions:Map<String, Array<Mission>> = [];
var ultraMissions:Map<String, Array<Mission>> = [];
goldMissions.set("beginner", parseDifficulty("gold", "missions_mbg", "beginner"));
goldMissions.set("intermediate", parseDifficulty("gold", "missions_mbg", "intermediate"));
@ -67,6 +68,10 @@ class MissionList {
platinumMissions.set("advanced", parseDifficulty("platinum", "missions_mbp", "advanced"));
platinumMissions.set("expert", parseDifficulty("platinum", "missions_mbp", "expert"));
ultraMissions.set("beginner", parseDifficulty("ultra", "missions_mbu", "beginner"));
ultraMissions.set("intermediate", parseDifficulty("ultra", "missions_mbu", "intermediate"));
ultraMissions.set("advanced", parseDifficulty("ultra", "missions_mbu", "advanced"));
customMissions = parseDifficulty("custom", "missions", "custom");
@:privateAccess goldMissions["beginner"][goldMissions["beginner"].length - 1].next = goldMissions["intermediate"][0];
@ -76,9 +81,13 @@ class MissionList {
@:privateAccess platinumMissions["intermediate"][platinumMissions["intermediate"].length - 1].next = platinumMissions["advanced"][0];
@:privateAccess platinumMissions["advanced"][platinumMissions["advanced"].length - 1].next = platinumMissions["expert"][0];
@:privateAccess platinumMissions["expert"][platinumMissions["expert"].length - 1].next = platinumMissions["beginner"][0];
@:privateAccess ultraMissions["beginner"][ultraMissions["beginner"].length - 1].next = ultraMissions["intermediate"][0];
@:privateAccess ultraMissions["intermediate"][ultraMissions["intermediate"].length - 1].next = ultraMissions["advanced"][0];
@:privateAccess ultraMissions["advanced"][ultraMissions["advanced"].length - 1].next = ultraMissions["beginner"][0];
missionList.set("gold", goldMissions);
missionList.set("platinum", platinumMissions);
missionList.set("ultra", ultraMissions);
// parseCLAList();

View file

@ -158,6 +158,14 @@ class ResourceLoader {
toloadfiles.push(file);
}
}
filestats = fileSystem.dir("missions_mbu");
for (file in filestats) {
if (file.isDirectory) {
toloaddirs.push(file);
} else {
toloadfiles.push(file);
}
}
while (toloaddirs.length > 0) {
var nextdir = toloaddirs.pop();
for (file in fileSystem.dir(nextdir.path.substring(2))) {

View file

@ -412,7 +412,11 @@ class PlayMissionGui extends GuiImage {
pmDifficultyUltraAdvanced.ratio = -1 / 16;
pmDifficultyUltraAdvanced.setExtent(new Vector(120, 31));
pmDifficultyUltraAdvanced.txtCtrl.text.text = " Advanced";
pmDifficultyUltraAdvanced.disabled = true;
pmDifficultyUltraAdvanced.pressedAction = (e) -> {
currentList = MissionList.missionList["ultra"]["advanced"];
currentCategory = "advanced";
setCategoryFunc("ultra", "advanced");
}
pmDifficultyCtrl.addChild(pmDifficultyUltraAdvanced);
var pmDifficultyUltraBeginner = new GuiButtonText(loadButtonImages("data/ui/play/difficulty_highlight-120"), markerFelt24);
@ -420,7 +424,11 @@ class PlayMissionGui extends GuiImage {
pmDifficultyUltraBeginner.ratio = -1 / 16;
pmDifficultyUltraBeginner.setExtent(new Vector(120, 31));
pmDifficultyUltraBeginner.txtCtrl.text.text = " Beginner";
pmDifficultyUltraBeginner.disabled = true;
pmDifficultyUltraBeginner.pressedAction = (e) -> {
currentList = MissionList.missionList["ultra"]["beginner"];
currentCategory = "beginner";
setCategoryFunc("ultra", "beginner");
}
pmDifficultyCtrl.addChild(pmDifficultyUltraBeginner);
var pmDifficultyUltraIntermediate = new GuiButtonText(loadButtonImages("data/ui/play/difficulty_highlight-120"), markerFelt24);
@ -428,7 +436,11 @@ class PlayMissionGui extends GuiImage {
pmDifficultyUltraIntermediate.ratio = -1 / 16;
pmDifficultyUltraIntermediate.setExtent(new Vector(120, 31));
pmDifficultyUltraIntermediate.txtCtrl.text.text = " Intermediate";
pmDifficultyUltraIntermediate.disabled = true;
pmDifficultyUltraIntermediate.pressedAction = (e) -> {
currentList = MissionList.missionList["ultra"]["intermediate"];
currentCategory = "intermediate";
setCategoryFunc("ultra", "intermediate");
}
pmDifficultyCtrl.addChild(pmDifficultyUltraIntermediate);
var pmDifficultyGoldAdvanced = new GuiButtonText(loadButtonImages("data/ui/play/difficulty_highlight-120"), markerFelt24);

View file

@ -8,7 +8,7 @@ import src.DtsObject;
import src.MarbleWorld;
class AntiGravity extends PowerUp {
public function new(element:MissionElementItem) {
public function new(element:MissionElementItem, norespawn:Bool = false) {
super(element);
this.dtsPath = "data/shapes/items/antigravity.dts";
this.isCollideable = false;
@ -16,6 +16,8 @@ class AntiGravity extends PowerUp {
this.identifier = "AntiGravity";
this.pickUpName = "Gravity Defier";
this.autoUse = true;
if (norespawn)
this.cooldownDuration = Math.NEGATIVE_INFINITY;
}
public function pickUp():Bool {

37
src/shapes/Blast.hx Normal file
View file

@ -0,0 +1,37 @@
package shapes;
import src.MarbleWorld;
import src.ResourceLoader;
import src.TimeState;
import mis.MissionElement.MissionElementItem;
class Blast extends PowerUp {
public function new(element:MissionElementItem) {
super(element);
this.dtsPath = "data/shapes/items/blast.dts";
this.isCollideable = false;
this.isTSStatic = false;
this.showSequences = true;
this.identifier = "Blast";
this.pickUpName = "Blast PowerUp";
this.autoUse = true;
}
public override function init(level:MarbleWorld, onFinish:Void->Void) {
super.init(level, () -> {
ResourceLoader.load("sound/publastvoice.wav").entry.load(() -> {
this.pickupSound = ResourceLoader.getResource("data/sound/publastvoice.wav", ResourceLoader.getAudio, this.soundResources);
onFinish();
});
});
}
public function pickUp():Bool {
return true;
}
public function use(timeState:TimeState) {
var marble = this.level.marble;
this.level.deselectPowerUp();
}
}

31
src/shapes/Glass.hx Normal file
View file

@ -0,0 +1,31 @@
package shapes;
import mis.MissionElement.MissionElementStaticShape;
import src.DtsObject;
class Glass extends DtsObject {
public function new(element:MissionElementStaticShape) {
super();
var datablockLowercase = element.datablock.toLowerCase();
switch (datablockLowercase) {
case "glass_3shape":
this.dtsPath = "data/shapes/glass/3x3.dts";
case "glass_6shape":
this.dtsPath = "data/shapes/glass/6x3.dts";
case "glass_9shape":
this.dtsPath = "data/shapes/glass/9x3.dts";
case "glass_12shape":
this.dtsPath = "data/shapes/glass/12x3.dts";
case "glass_15shape":
this.dtsPath = "data/shapes/glass/15x3.dts";
case "glass_18shape":
this.dtsPath = "data/shapes/glass/18x3.dts";
}
this.isCollideable = true;
this.useInstancing = true;
this.identifier = datablockLowercase;
}
}

35
src/shapes/MegaMarble.hx Normal file
View file

@ -0,0 +1,35 @@
package shapes;
import src.MarbleWorld;
import src.ResourceLoader;
import src.TimeState;
import mis.MissionElement.MissionElementItem;
class MegaMarble extends PowerUp {
public function new(element:MissionElementItem) {
super(element);
this.dtsPath = "data/shapes/items/megamarble.dts";
this.isCollideable = false;
this.isTSStatic = false;
this.showSequences = true;
this.identifier = "MegaMarble";
this.pickUpName = "Mega Marble PowerUp";
}
public override function init(level:MarbleWorld, onFinish:Void->Void) {
super.init(level, () -> {
ResourceLoader.load("sound/pumegamarblevoice.wav").entry.load(() -> {
this.pickupSound = ResourceLoader.getResource("data/sound/pumegamarblevoice.wav", ResourceLoader.getAudio, this.soundResources);
onFinish();
});
});
}
public function pickUp():Bool {
return this.level.pickUpPowerUp(this);
}
public function use(timeState:TimeState) {
this.level.deselectPowerUp();
}
}

16
src/shapes/Sky.hx Normal file
View file

@ -0,0 +1,16 @@
package shapes;
import src.DtsObject;
class Sky extends DtsObject {
public function new(type:String) {
super();
this.dtsPath = 'data/shapes/skies/${type}/${type}.dts';
this.isCollideable = false;
this.useInstancing = true;
this.identifier = type + "Sky";
}
}