mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-12-23 16:32:49 +00:00
add mbu models
This commit is contained in:
parent
e39420e8b1
commit
8980869082
9 changed files with 193 additions and 4 deletions
|
|
@ -1,5 +1,8 @@
|
||||||
package src;
|
package src;
|
||||||
|
|
||||||
|
import shapes.MegaMarble;
|
||||||
|
import shapes.Blast;
|
||||||
|
import shapes.Glass;
|
||||||
import gui.OOBInsultGui;
|
import gui.OOBInsultGui;
|
||||||
import shapes.Checkpoint;
|
import shapes.Checkpoint;
|
||||||
import triggers.CheckpointTrigger;
|
import triggers.CheckpointTrigger;
|
||||||
|
|
@ -297,6 +300,8 @@ class MarbleWorld extends Scheduler {
|
||||||
worker.loadFile(file);
|
worker.loadFile(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.scene.camera.zFar = Math.max(2000, Std.parseFloat(this.skyElement.visibledistance));
|
||||||
|
|
||||||
this.sky = new Sky();
|
this.sky = new Sky();
|
||||||
|
|
||||||
sky.dmlPath = ResourceLoader.getProperFilepath(skyElement.materiallist);
|
sky.dmlPath = ResourceLoader.getProperFilepath(skyElement.materiallist);
|
||||||
|
|
@ -666,6 +671,8 @@ class MarbleWorld extends Scheduler {
|
||||||
shape = new Magnet();
|
shape = new Magnet();
|
||||||
else if (dataBlockLowerCase == "antigravityitem")
|
else if (dataBlockLowerCase == "antigravityitem")
|
||||||
shape = new AntiGravity(cast element);
|
shape = new AntiGravity(cast element);
|
||||||
|
else if (dataBlockLowerCase == "norespawnantigravityitem")
|
||||||
|
shape = new AntiGravity(cast element, true);
|
||||||
else if (dataBlockLowerCase == "landmine")
|
else if (dataBlockLowerCase == "landmine")
|
||||||
shape = new LandMine();
|
shape = new LandMine();
|
||||||
else if (dataBlockLowerCase == "nuke")
|
else if (dataBlockLowerCase == "nuke")
|
||||||
|
|
@ -676,6 +683,10 @@ class MarbleWorld extends Scheduler {
|
||||||
shape = new SuperSpeed(cast element);
|
shape = new SuperSpeed(cast element);
|
||||||
else if (dataBlockLowerCase == "timetravelitem" || dataBlockLowerCase == "timepenaltyitem")
|
else if (dataBlockLowerCase == "timetravelitem" || dataBlockLowerCase == "timepenaltyitem")
|
||||||
shape = new TimeTravel(cast element);
|
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")
|
else if (dataBlockLowerCase == "tornado")
|
||||||
shape = new Tornado();
|
shape = new Tornado();
|
||||||
else if (dataBlockLowerCase == "trapdoor")
|
else if (dataBlockLowerCase == "trapdoor")
|
||||||
|
|
@ -684,6 +695,17 @@ class MarbleWorld extends Scheduler {
|
||||||
shape = new Oilslick();
|
shape = new Oilslick();
|
||||||
else if (dataBlockLowerCase == "arrow" || StringTools.startsWith(dataBlockLowerCase, "sign"))
|
else if (dataBlockLowerCase == "arrow" || StringTools.startsWith(dataBlockLowerCase, "sign"))
|
||||||
shape = new Sign(cast element);
|
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 {
|
else {
|
||||||
onFinish();
|
onFinish();
|
||||||
return;
|
return;
|
||||||
|
|
@ -762,6 +784,8 @@ class MarbleWorld extends Scheduler {
|
||||||
shape = new Magnet();
|
shape = new Magnet();
|
||||||
else if (dataBlockLowerCase == "antigravityitem")
|
else if (dataBlockLowerCase == "antigravityitem")
|
||||||
shape = new AntiGravity(cast element);
|
shape = new AntiGravity(cast element);
|
||||||
|
else if (dataBlockLowerCase == "norespawnantigravityitem")
|
||||||
|
shape = new AntiGravity(cast element, true);
|
||||||
else if (dataBlockLowerCase == "landmine")
|
else if (dataBlockLowerCase == "landmine")
|
||||||
shape = new LandMine();
|
shape = new LandMine();
|
||||||
else if (dataBlockLowerCase == "nuke")
|
else if (dataBlockLowerCase == "nuke")
|
||||||
|
|
@ -772,6 +796,10 @@ class MarbleWorld extends Scheduler {
|
||||||
shape = new SuperSpeed(cast element);
|
shape = new SuperSpeed(cast element);
|
||||||
else if (dataBlockLowerCase == "timetravelitem" || dataBlockLowerCase == "timepenaltyitem")
|
else if (dataBlockLowerCase == "timetravelitem" || dataBlockLowerCase == "timepenaltyitem")
|
||||||
shape = new TimeTravel(cast element);
|
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")
|
else if (dataBlockLowerCase == "tornado")
|
||||||
shape = new Tornado();
|
shape = new Tornado();
|
||||||
else if (dataBlockLowerCase == "trapdoor")
|
else if (dataBlockLowerCase == "trapdoor")
|
||||||
|
|
@ -780,6 +808,17 @@ class MarbleWorld extends Scheduler {
|
||||||
shape = new Oilslick();
|
shape = new Oilslick();
|
||||||
else if (dataBlockLowerCase == "arrow" || StringTools.startsWith(dataBlockLowerCase, "sign"))
|
else if (dataBlockLowerCase == "arrow" || StringTools.startsWith(dataBlockLowerCase, "sign"))
|
||||||
shape = new Sign(cast element);
|
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 {
|
else {
|
||||||
onFinish();
|
onFinish();
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ class MissionList {
|
||||||
|
|
||||||
var goldMissions:Map<String, Array<Mission>> = [];
|
var goldMissions:Map<String, Array<Mission>> = [];
|
||||||
var platinumMissions: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("beginner", parseDifficulty("gold", "missions_mbg", "beginner"));
|
||||||
goldMissions.set("intermediate", parseDifficulty("gold", "missions_mbg", "intermediate"));
|
goldMissions.set("intermediate", parseDifficulty("gold", "missions_mbg", "intermediate"));
|
||||||
|
|
@ -67,6 +68,10 @@ class MissionList {
|
||||||
platinumMissions.set("advanced", parseDifficulty("platinum", "missions_mbp", "advanced"));
|
platinumMissions.set("advanced", parseDifficulty("platinum", "missions_mbp", "advanced"));
|
||||||
platinumMissions.set("expert", parseDifficulty("platinum", "missions_mbp", "expert"));
|
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");
|
customMissions = parseDifficulty("custom", "missions", "custom");
|
||||||
|
|
||||||
@:privateAccess goldMissions["beginner"][goldMissions["beginner"].length - 1].next = goldMissions["intermediate"][0];
|
@: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["intermediate"][platinumMissions["intermediate"].length - 1].next = platinumMissions["advanced"][0];
|
||||||
@:privateAccess platinumMissions["advanced"][platinumMissions["advanced"].length - 1].next = platinumMissions["expert"][0];
|
@:privateAccess platinumMissions["advanced"][platinumMissions["advanced"].length - 1].next = platinumMissions["expert"][0];
|
||||||
@:privateAccess platinumMissions["expert"][platinumMissions["expert"].length - 1].next = platinumMissions["beginner"][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("gold", goldMissions);
|
||||||
missionList.set("platinum", platinumMissions);
|
missionList.set("platinum", platinumMissions);
|
||||||
|
missionList.set("ultra", ultraMissions);
|
||||||
|
|
||||||
// parseCLAList();
|
// parseCLAList();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -158,6 +158,14 @@ class ResourceLoader {
|
||||||
toloadfiles.push(file);
|
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) {
|
while (toloaddirs.length > 0) {
|
||||||
var nextdir = toloaddirs.pop();
|
var nextdir = toloaddirs.pop();
|
||||||
for (file in fileSystem.dir(nextdir.path.substring(2))) {
|
for (file in fileSystem.dir(nextdir.path.substring(2))) {
|
||||||
|
|
|
||||||
|
|
@ -412,7 +412,11 @@ class PlayMissionGui extends GuiImage {
|
||||||
pmDifficultyUltraAdvanced.ratio = -1 / 16;
|
pmDifficultyUltraAdvanced.ratio = -1 / 16;
|
||||||
pmDifficultyUltraAdvanced.setExtent(new Vector(120, 31));
|
pmDifficultyUltraAdvanced.setExtent(new Vector(120, 31));
|
||||||
pmDifficultyUltraAdvanced.txtCtrl.text.text = " Advanced";
|
pmDifficultyUltraAdvanced.txtCtrl.text.text = " Advanced";
|
||||||
pmDifficultyUltraAdvanced.disabled = true;
|
pmDifficultyUltraAdvanced.pressedAction = (e) -> {
|
||||||
|
currentList = MissionList.missionList["ultra"]["advanced"];
|
||||||
|
currentCategory = "advanced";
|
||||||
|
setCategoryFunc("ultra", "advanced");
|
||||||
|
}
|
||||||
pmDifficultyCtrl.addChild(pmDifficultyUltraAdvanced);
|
pmDifficultyCtrl.addChild(pmDifficultyUltraAdvanced);
|
||||||
|
|
||||||
var pmDifficultyUltraBeginner = new GuiButtonText(loadButtonImages("data/ui/play/difficulty_highlight-120"), markerFelt24);
|
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.ratio = -1 / 16;
|
||||||
pmDifficultyUltraBeginner.setExtent(new Vector(120, 31));
|
pmDifficultyUltraBeginner.setExtent(new Vector(120, 31));
|
||||||
pmDifficultyUltraBeginner.txtCtrl.text.text = " Beginner";
|
pmDifficultyUltraBeginner.txtCtrl.text.text = " Beginner";
|
||||||
pmDifficultyUltraBeginner.disabled = true;
|
pmDifficultyUltraBeginner.pressedAction = (e) -> {
|
||||||
|
currentList = MissionList.missionList["ultra"]["beginner"];
|
||||||
|
currentCategory = "beginner";
|
||||||
|
setCategoryFunc("ultra", "beginner");
|
||||||
|
}
|
||||||
pmDifficultyCtrl.addChild(pmDifficultyUltraBeginner);
|
pmDifficultyCtrl.addChild(pmDifficultyUltraBeginner);
|
||||||
|
|
||||||
var pmDifficultyUltraIntermediate = new GuiButtonText(loadButtonImages("data/ui/play/difficulty_highlight-120"), markerFelt24);
|
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.ratio = -1 / 16;
|
||||||
pmDifficultyUltraIntermediate.setExtent(new Vector(120, 31));
|
pmDifficultyUltraIntermediate.setExtent(new Vector(120, 31));
|
||||||
pmDifficultyUltraIntermediate.txtCtrl.text.text = " Intermediate";
|
pmDifficultyUltraIntermediate.txtCtrl.text.text = " Intermediate";
|
||||||
pmDifficultyUltraIntermediate.disabled = true;
|
pmDifficultyUltraIntermediate.pressedAction = (e) -> {
|
||||||
|
currentList = MissionList.missionList["ultra"]["intermediate"];
|
||||||
|
currentCategory = "intermediate";
|
||||||
|
setCategoryFunc("ultra", "intermediate");
|
||||||
|
}
|
||||||
pmDifficultyCtrl.addChild(pmDifficultyUltraIntermediate);
|
pmDifficultyCtrl.addChild(pmDifficultyUltraIntermediate);
|
||||||
|
|
||||||
var pmDifficultyGoldAdvanced = new GuiButtonText(loadButtonImages("data/ui/play/difficulty_highlight-120"), markerFelt24);
|
var pmDifficultyGoldAdvanced = new GuiButtonText(loadButtonImages("data/ui/play/difficulty_highlight-120"), markerFelt24);
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import src.DtsObject;
|
||||||
import src.MarbleWorld;
|
import src.MarbleWorld;
|
||||||
|
|
||||||
class AntiGravity extends PowerUp {
|
class AntiGravity extends PowerUp {
|
||||||
public function new(element:MissionElementItem) {
|
public function new(element:MissionElementItem, norespawn:Bool = false) {
|
||||||
super(element);
|
super(element);
|
||||||
this.dtsPath = "data/shapes/items/antigravity.dts";
|
this.dtsPath = "data/shapes/items/antigravity.dts";
|
||||||
this.isCollideable = false;
|
this.isCollideable = false;
|
||||||
|
|
@ -16,6 +16,8 @@ class AntiGravity extends PowerUp {
|
||||||
this.identifier = "AntiGravity";
|
this.identifier = "AntiGravity";
|
||||||
this.pickUpName = "Gravity Defier";
|
this.pickUpName = "Gravity Defier";
|
||||||
this.autoUse = true;
|
this.autoUse = true;
|
||||||
|
if (norespawn)
|
||||||
|
this.cooldownDuration = Math.NEGATIVE_INFINITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function pickUp():Bool {
|
public function pickUp():Bool {
|
||||||
|
|
|
||||||
37
src/shapes/Blast.hx
Normal file
37
src/shapes/Blast.hx
Normal 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
31
src/shapes/Glass.hx
Normal 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
35
src/shapes/MegaMarble.hx
Normal 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
16
src/shapes/Sky.hx
Normal 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";
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue