mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
700 lines
19 KiB
Haxe
700 lines
19 KiB
Haxe
package gui;
|
|
|
|
import h2d.filter.DropShadow;
|
|
import hxd.res.BitmapFont;
|
|
import h3d.prim.Polygon;
|
|
import h3d.scene.Mesh;
|
|
import h3d.shader.AlphaChannel;
|
|
import src.MarbleGame;
|
|
import h3d.Vector;
|
|
import src.ResourceLoader;
|
|
import src.DtsObject;
|
|
import src.Settings;
|
|
import src.ResourceLoaderWorker;
|
|
|
|
class MarbleSelectGui extends GuiImage {
|
|
public function new() {
|
|
var img = ResourceLoader.getImage("data/ui/marbleSelect/marbleSelect.png");
|
|
super(img.resource.toTile());
|
|
this.horizSizing = Center;
|
|
this.vertSizing = Center;
|
|
this.position = new Vector(73, -59);
|
|
this.extent = new Vector(493, 361);
|
|
|
|
var marbleData = [
|
|
[
|
|
{
|
|
name: "Staff's Original",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "3D Marble",
|
|
dts: "data/shapes/balls/3dMarble.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Mid P",
|
|
dts: "data/shapes/balls/midp.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Spade",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin4",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "GMD Logo",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin5",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Textured Marble",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin6",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Golden Marble",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin7",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Rainbow Marble",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin8",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Brown Swirls",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin9",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Caution Stripes",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin10",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Earth",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin11",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Golf Ball",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin12",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Jupiter",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin13",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "MB Gold Marble",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin14",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "MBP on the Marble!",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin15",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Moshe",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin16",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Strong Bad",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin17",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Venus",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin18",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Water",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin19",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Evil Eye",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin20",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Desert and Sky",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin21",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Dirt Marble",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin22",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Friction Textured Marble",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin23",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Grass",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin24",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Mars",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin25",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Phil's Golf Ball",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin26",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Molten",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin27",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Lightning",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin28",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Phil'sEmpire",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin29",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Matan's Red Dragon",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin30",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Metallic Marble",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin31",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Sun",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin32",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Underwater",
|
|
dts: "data/shapes/balls/ball-superball.dts",
|
|
skin: "skin33",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "GarageGames logo",
|
|
dts: "data/shapes/balls/garageGames.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Big Marble 1",
|
|
dts: "data/shapes/balls/bm1.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Big Marble 2",
|
|
dts: "data/shapes/balls/bm2.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Big Marble 3",
|
|
dts: "data/shapes/balls/bm3.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Small Marble 1",
|
|
dts: "data/shapes/balls/sm1.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Small Marble 2",
|
|
dts: "data/shapes/balls/sm2.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Small Marble 3",
|
|
dts: "data/shapes/balls/sm3.dts",
|
|
skin: "base",
|
|
shader: "Default"
|
|
}
|
|
],
|
|
[
|
|
{
|
|
name: "Deep Blue",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin1",
|
|
shader: "ClassicGlassPureSphere"
|
|
},
|
|
{
|
|
name: "Blood Red",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin2",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Gang Green",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin6",
|
|
shader: "ClassicGlassPureSphere"
|
|
},
|
|
{
|
|
name: "Pink Candy",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin27",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Chocolate",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin5",
|
|
shader: "ClassicGlassPureSphere"
|
|
},
|
|
{
|
|
name: "Grape",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin4",
|
|
shader: "ClassicGlassPureSphere"
|
|
},
|
|
{
|
|
name: "Lemon",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin28",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Lime Green",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin8",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Blueberry",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin7",
|
|
shader: "ClassicGlassPureSphere"
|
|
},
|
|
{
|
|
name: "Tangerine",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin3",
|
|
shader: "ClassicGlassPureSphere"
|
|
},
|
|
{
|
|
name: "8 Ball",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin9",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Ace of Hearts",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin22",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Football",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin16",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "9 Ball",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin29",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Ace of Spades",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin24",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "GarageGames",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin10",
|
|
shader: "ClassicMarb2"
|
|
},
|
|
{
|
|
name: "Bob",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin30",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Skully",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin18",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Jack-o-Lantern",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin34",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Walled Up",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin25",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Sunny Side Up",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin11",
|
|
shader: "ClassicMetal"
|
|
},
|
|
{
|
|
name: "Lunar",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin31",
|
|
shader: "ClassicMetal"
|
|
},
|
|
{
|
|
name: "Battery",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin14",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Static",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin32",
|
|
shader: "ClassicMarb2"
|
|
},
|
|
{
|
|
name: "Earth",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin20",
|
|
shader: "ClassicMarbGlass20"
|
|
},
|
|
{
|
|
name: "Red and X",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin13",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Orange Spiral",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin12",
|
|
shader: "ClassicGlassPureSphere"
|
|
},
|
|
{
|
|
name: "Blue Spiral",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin15",
|
|
shader: "ClassicGlassPureSphere"
|
|
},
|
|
{
|
|
name: "Sliced Marble",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin21",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Orange Checkers",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin19",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Torque",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin33",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Fred",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin17",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Pirate",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin26",
|
|
shader: "ClassicMarbGlass18"
|
|
},
|
|
{
|
|
name: "Shuriken",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin23",
|
|
shader: "ClassicMarb3"
|
|
},
|
|
{
|
|
name: "Eyeball",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin35",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Woody",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin36",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Dat Nostalgia",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin37",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Graffiti",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin38",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Asteroid",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin39",
|
|
shader: "Default"
|
|
},
|
|
{
|
|
name: "Disco Ball",
|
|
dts: "data/shapes/balls/pack1/pack1marble.dts",
|
|
skin: "uskin40",
|
|
shader: "Default"
|
|
}
|
|
|
|
],
|
|
];
|
|
|
|
var categoryNames = ["Official Marbles", "MBUltra"];
|
|
|
|
var curSelection:Int = Settings.optionsSettings.marbleIndex;
|
|
var curCategorySelection:Int = Settings.optionsSettings.marbleCategoryIndex;
|
|
|
|
function loadButtonImages(path:String) {
|
|
var normal = ResourceLoader.getResource('${path}_n.png', ResourceLoader.getImage, this.imageResources).toTile();
|
|
var hover = ResourceLoader.getResource('${path}_h.png', ResourceLoader.getImage, this.imageResources).toTile();
|
|
var pressed = ResourceLoader.getResource('${path}_d.png', ResourceLoader.getImage, this.imageResources).toTile();
|
|
var disabled = ResourceLoader.getResource('${path}_i.png', ResourceLoader.getImage, this.imageResources).toTile();
|
|
return [normal, hover, pressed, disabled];
|
|
}
|
|
|
|
var markerFelt32fontdata = ResourceLoader.getFileEntry("data/font/MarkerFelt.fnt");
|
|
var markerFelt32b = new BitmapFont(markerFelt32fontdata.entry);
|
|
@:privateAccess markerFelt32b.loader = ResourceLoader.loader;
|
|
var markerFelt32 = markerFelt32b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel);
|
|
var markerFelt24 = markerFelt32b.toSdfFont(cast 18 * Settings.uiScale, MultiChannel);
|
|
var markerFelt28 = markerFelt32b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel);
|
|
|
|
var selectBtn = new GuiButton(loadButtonImages("data/ui/marbleSelect/select"));
|
|
selectBtn.horizSizing = Center;
|
|
selectBtn.vertSizing = Top;
|
|
selectBtn.position = new Vector(199, 270);
|
|
selectBtn.extent = new Vector(95, 45);
|
|
selectBtn.pressedAction = (e) -> {
|
|
Settings.optionsSettings.marbleIndex = curSelection;
|
|
Settings.optionsSettings.marbleCategoryIndex = curCategorySelection;
|
|
Settings.optionsSettings.marbleSkin = marbleData[curCategorySelection][curSelection].skin;
|
|
Settings.optionsSettings.marbleModel = marbleData[curCategorySelection][curSelection].dts;
|
|
Settings.optionsSettings.marbleShader = marbleData[curCategorySelection][curSelection].shader;
|
|
Settings.save();
|
|
MarbleGame.canvas.popDialog(this);
|
|
}
|
|
this.addChild(selectBtn);
|
|
|
|
var marbleShow = buildObjectShow(marbleData[curCategorySelection][curSelection].dts, new Vector(171, 97), new Vector(150, 150), 2.6, 0,
|
|
["base.marble" => marbleData[curCategorySelection][curSelection].skin + ".marble"]);
|
|
marbleShow.horizSizing = Center;
|
|
marbleShow.vertSizing = Bottom;
|
|
marbleShow.visible = true;
|
|
this.addChild(marbleShow);
|
|
|
|
var titleText = new GuiMLText(markerFelt28, null);
|
|
titleText.text.textColor = 0xFFFFFF;
|
|
titleText.text.filter = new DropShadow(1.414, 0.785, 0, 1, 0x0000007F, 0.4, 1, true);
|
|
titleText.horizSizing = Center;
|
|
titleText.vertSizing = Bottom;
|
|
titleText.position = new Vector(140, 67);
|
|
titleText.extent = new Vector(213, 27);
|
|
titleText.text.text = '<p align="center">${categoryNames[curCategorySelection]}</p>';
|
|
this.addChild(titleText);
|
|
|
|
var marbleText = new GuiMLText(markerFelt24, null);
|
|
marbleText.text.textColor = 0xFFFFFF;
|
|
marbleText.text.filter = new DropShadow(1.414, 0.785, 0, 1, 0x0000007F, 0.4, 1, true);
|
|
marbleText.horizSizing = Center;
|
|
marbleText.vertSizing = Bottom;
|
|
marbleText.position = new Vector(86, 243);
|
|
marbleText.extent = new Vector(320, 22);
|
|
marbleText.text.text = '<p align="center">${marbleData[curCategorySelection][curSelection].name}</p>';
|
|
this.addChild(marbleText);
|
|
|
|
var changeMarbleText = new GuiImage(ResourceLoader.getResource("data/ui/play/change_marble_text.png", ResourceLoader.getImage, this.imageResources)
|
|
.toTile());
|
|
changeMarbleText.horizSizing = Center;
|
|
changeMarbleText.position = new Vector(96, 26);
|
|
changeMarbleText.extent = new Vector(300, 39);
|
|
this.addChild(changeMarbleText);
|
|
|
|
function setMarbleSelection(idx:Int, categoryIdx:Int) {
|
|
if (categoryIdx < 0)
|
|
categoryIdx = marbleData.length + categoryIdx;
|
|
if (categoryIdx >= marbleData.length)
|
|
categoryIdx -= marbleData.length;
|
|
|
|
if (idx < 0)
|
|
idx = marbleData[categoryIdx].length + idx;
|
|
if (idx >= marbleData[categoryIdx].length)
|
|
idx -= marbleData[categoryIdx].length;
|
|
curSelection = idx;
|
|
curCategorySelection = categoryIdx;
|
|
var marble = marbleData[categoryIdx][idx];
|
|
|
|
titleText.text.text = '<p align="center">${categoryNames[curCategorySelection]}</p>';
|
|
marbleText.text.text = '<p align="center">${marble.name}</p>';
|
|
|
|
var dtsObj = new DtsObject();
|
|
dtsObj.dtsPath = marble.dts;
|
|
dtsObj.ambientRotate = true;
|
|
dtsObj.ambientSpinFactor /= -2;
|
|
dtsObj.showSequences = false;
|
|
dtsObj.useInstancing = false;
|
|
dtsObj.matNameOverride.set("base.marble", marble.skin + ".marble");
|
|
|
|
ResourceLoader.load(dtsObj.dtsPath).entry.load(() -> {
|
|
var dtsFile = ResourceLoader.loadDts(dtsObj.dtsPath);
|
|
var directoryPath = haxe.io.Path.directory(dtsObj.dtsPath);
|
|
var texToLoad = [];
|
|
for (i in 0...dtsFile.resource.matNames.length) {
|
|
var matName = dtsObj.matNameOverride.exists(dtsFile.resource.matNames[i]) ? dtsObj.matNameOverride.get(dtsFile.resource.matNames[i]) : dtsFile.resource.matNames[i];
|
|
var fullNames = ResourceLoader.getFullNamesOf(directoryPath + '/' + matName).filter(x -> haxe.io.Path.extension(x) != "dts");
|
|
var fullName = fullNames.length > 0 ? fullNames[0] : null;
|
|
if (fullName != null) {
|
|
texToLoad.push(fullName);
|
|
}
|
|
}
|
|
|
|
var worker = new ResourceLoaderWorker(() -> {
|
|
dtsObj.init(null, () -> {}); // The lambda is not gonna run async anyway
|
|
for (mat in dtsObj.materials) {
|
|
mat.mainPass.enableLights = false;
|
|
mat.mainPass.culling = None;
|
|
if (mat.blendMode != Alpha && mat.blendMode != Add)
|
|
mat.mainPass.addShader(new AlphaChannel());
|
|
}
|
|
marbleShow.changeObject(dtsObj);
|
|
});
|
|
|
|
for (texPath in texToLoad) {
|
|
worker.loadFile(texPath);
|
|
}
|
|
worker.run();
|
|
});
|
|
}
|
|
|
|
var nextBtn = new GuiButton(loadButtonImages("data/ui/marbleSelect/next"));
|
|
nextBtn.position = new Vector(296, 270);
|
|
nextBtn.extent = new Vector(75, 45);
|
|
nextBtn.pressedAction = (e) -> {
|
|
setMarbleSelection(curSelection + 1, curCategorySelection);
|
|
}
|
|
this.addChild(nextBtn);
|
|
|
|
var prevBtn = new GuiButton(loadButtonImages("data/ui/marbleSelect/prev"));
|
|
prevBtn.position = new Vector(123, 270);
|
|
prevBtn.extent = new Vector(75, 45);
|
|
prevBtn.pressedAction = (e) -> {
|
|
setMarbleSelection(curSelection - 1, curCategorySelection);
|
|
}
|
|
|
|
var nextCategoryBtn = new GuiButton(loadButtonImages("data/ui/marbleSelect/nextcat"));
|
|
nextCategoryBtn.position = new Vector(371, 270);
|
|
nextCategoryBtn.extent = new Vector(85, 45);
|
|
nextCategoryBtn.pressedAction = (e) -> {
|
|
setMarbleSelection(0, curCategorySelection + 1);
|
|
}
|
|
this.addChild(nextCategoryBtn);
|
|
|
|
var prevCategoryBtn = new GuiButton(loadButtonImages("data/ui/marbleSelect/prevcat"));
|
|
prevCategoryBtn.position = new Vector(37, 270);
|
|
prevCategoryBtn.extent = new Vector(85, 45);
|
|
prevCategoryBtn.pressedAction = (e) -> {
|
|
setMarbleSelection(0, curCategorySelection - 1);
|
|
}
|
|
this.addChild(prevCategoryBtn);
|
|
|
|
setMarbleSelection(curSelection, curCategorySelection);
|
|
this.addChild(prevBtn);
|
|
}
|
|
|
|
function buildObjectShow(dtsPath:String, position:Vector, extent:Vector, dist:Float = 5, pitch:Float = 0, matnameOverride:Map<String, String> = null) {
|
|
var oShow = new GuiObjectShow();
|
|
var dtsObj = new DtsObject();
|
|
dtsObj.dtsPath = dtsPath;
|
|
dtsObj.ambientRotate = true;
|
|
dtsObj.ambientSpinFactor /= -2;
|
|
dtsObj.showSequences = false;
|
|
dtsObj.useInstancing = false;
|
|
if (matnameOverride != null) {
|
|
for (key => value in matnameOverride) {
|
|
dtsObj.matNameOverride.set(key, value);
|
|
}
|
|
}
|
|
dtsObj.init(null, () -> {}); // The lambda is not gonna run async anyway
|
|
for (mat in dtsObj.materials) {
|
|
mat.mainPass.enableLights = false;
|
|
mat.mainPass.culling = None;
|
|
if (mat.blendMode != Alpha && mat.blendMode != Add)
|
|
mat.mainPass.addShader(new AlphaChannel());
|
|
}
|
|
oShow.sceneObject = dtsObj;
|
|
oShow.position = position;
|
|
oShow.extent = extent;
|
|
oShow.renderDistance = dist;
|
|
oShow.renderPitch = pitch;
|
|
return oShow;
|
|
}
|
|
}
|