mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
120 lines
3.8 KiB
Haxe
120 lines
3.8 KiB
Haxe
package src;
|
|
|
|
import haxe.io.BytesBuffer;
|
|
import h2d.Tile;
|
|
import hxd.BitmapData;
|
|
import mis.MisParser;
|
|
import mis.MissionElement.MissionElementScriptObject;
|
|
import mis.MissionElement.MissionElementType;
|
|
import mis.MisFile;
|
|
import mis.MissionElement.MissionElementSimGroup;
|
|
import src.ResourceLoader;
|
|
import hxd.res.Image;
|
|
import src.Resource;
|
|
|
|
class Mission {
|
|
public var root:MissionElementSimGroup;
|
|
public var title:String;
|
|
public var artist:String;
|
|
public var description:String;
|
|
public var qualifyTime = Math.POSITIVE_INFINITY;
|
|
public var goldTime:Float = 0;
|
|
public var type:String;
|
|
public var path:String;
|
|
public var missionInfo:MissionElementScriptObject;
|
|
public var index:Int;
|
|
public var difficultyIndex:Int;
|
|
public var id:Int;
|
|
public var isClaMission:Bool;
|
|
|
|
var imageResources:Array<Resource<Image>> = [];
|
|
|
|
var imgFileEntry:hxd.fs.FileEntry;
|
|
|
|
static var doingLoadPreviewTimeout = false;
|
|
|
|
public function new() {}
|
|
|
|
public function load() {
|
|
var misParser = new MisParser(ResourceLoader.fileSystem.get(this.path).getText());
|
|
var contents = misParser.parse();
|
|
root = contents.root;
|
|
}
|
|
|
|
public function dispose() {
|
|
for (imageResource in imageResources) {
|
|
imageResource.release();
|
|
}
|
|
}
|
|
|
|
public static function fromMissionInfo(path:String, mInfo:MissionElementScriptObject) {
|
|
var mission = new Mission();
|
|
mission.path = path;
|
|
mission.missionInfo = mInfo;
|
|
|
|
var missionInfo = mInfo;
|
|
|
|
mission.title = missionInfo.name;
|
|
mission.artist = missionInfo.artist == null ? '' : missionInfo.artist;
|
|
mission.description = missionInfo.desc == null ? '' : missionInfo.desc;
|
|
if (missionInfo.time != null && missionInfo.time != "0")
|
|
mission.qualifyTime = MisParser.parseNumber(missionInfo.time) / 1000;
|
|
if (missionInfo.goldtime != null) {
|
|
mission.goldTime = MisParser.parseNumber(missionInfo.goldtime) / 1000;
|
|
}
|
|
mission.type = missionInfo.type.toLowerCase();
|
|
mission.missionInfo = missionInfo;
|
|
return mission;
|
|
}
|
|
|
|
public function getPreviewImage(onLoaded:h2d.Tile->Void) {
|
|
if (!this.isClaMission) {
|
|
var basename = haxe.io.Path.withoutExtension(this.path);
|
|
if (ResourceLoader.fileSystem.exists(basename + ".png")) {
|
|
imgFileEntry = ResourceLoader.fileSystem.get(basename + ".png");
|
|
imgFileEntry.load(() -> {
|
|
var ret = ResourceLoader.getResource(basename + ".png", ResourceLoader.getImage, this.imageResources).toTile();
|
|
onLoaded(ret);
|
|
});
|
|
}
|
|
if (ResourceLoader.fileSystem.exists(basename + ".jpg")) {
|
|
imgFileEntry = ResourceLoader.fileSystem.get(basename + ".jpg");
|
|
imgFileEntry.load(() -> {
|
|
var ret = ResourceLoader.getResource(basename + ".jpg", ResourceLoader.getImage, this.imageResources).toTile();
|
|
onLoaded(ret);
|
|
});
|
|
}
|
|
var img = new BitmapData(1, 1);
|
|
img.setPixel(0, 0, 0);
|
|
onLoaded(Tile.fromBitmap(img));
|
|
} else {
|
|
var img = new BitmapData(1, 1);
|
|
img.setPixel(0, 0, 0);
|
|
onLoaded(Tile.fromBitmap(img));
|
|
}
|
|
}
|
|
|
|
public function getDifPath(rawElementPath:String) {
|
|
if (StringTools.contains(rawElementPath, "$usermods")) {
|
|
rawElementPath = rawElementPath.split("@").slice(1).map(x -> {
|
|
var a = StringTools.trim(x);
|
|
a = Util.unescape(a.substr(1, a.length - 2));
|
|
return a;
|
|
}).join('');
|
|
}
|
|
var fname = rawElementPath.substring(rawElementPath.lastIndexOf('/') + 1);
|
|
rawElementPath = rawElementPath.toLowerCase();
|
|
var path = StringTools.replace(rawElementPath.substring(rawElementPath.indexOf('data/')), "\"", "");
|
|
if (StringTools.contains(path, 'interiors_mbg/'))
|
|
path = StringTools.replace(path, 'interiors_mbg/', 'interiors/');
|
|
var dirpath = path.substring(0, path.lastIndexOf('/') + 1);
|
|
#if (js || android)
|
|
path = StringTools.replace(path, "data/", "");
|
|
#end
|
|
if (ResourceLoader.fileSystem.exists(path))
|
|
return path;
|
|
if (ResourceLoader.fileSystem.exists(dirpath + fname))
|
|
return dirpath + fname;
|
|
return "";
|
|
}
|
|
}
|