diff --git a/src/CameraController.hx b/src/CameraController.hx index 1ea925e8..bd4edc0d 100644 --- a/src/CameraController.hx +++ b/src/CameraController.hx @@ -164,7 +164,7 @@ class CameraController extends Object { deltaposY = 0; } - var factor = isTouch ? Util.lerp(1 / 25, 1 / 15, + var factor = isTouch ? Util.lerp(1 / 200, 1 / 50, Settings.controlsSettings.cameraSensitivity) : Util.lerp(1 / 1000, 1 / 200, Settings.controlsSettings.cameraSensitivity); // CameraPitch += deltaposY * factor; diff --git a/src/Main.hx b/src/Main.hx index 427ebf25..c2388f72 100644 --- a/src/Main.hx +++ b/src/Main.hx @@ -64,8 +64,16 @@ class Main extends hxd.App { s3d.camera.setFovX(Settings.optionsSettings.fovX, Settings.optionsSettings.screenWidth / Settings.optionsSettings.screenHeight); #end #if android - var zoomRatio = Window.getInstance().height / 700; + var zoomRatio = Math.min(Window.getInstance().height, Window.getInstance().width) / 700; s2d.scaleMode = Zoom(zoomRatio); + + trace("Initial Window resized to " + + Window.getInstance().width + + "x" + + Window.getInstance().height + + " (Zoom " + + zoomRatio + + ")"); #end #if android diff --git a/src/ResourceLoader.hx b/src/ResourceLoader.hx index 9b72f3e9..006b0622 100644 --- a/src/ResourceLoader.hx +++ b/src/ResourceLoader.hx @@ -61,11 +61,14 @@ class ResourceLoader { #if (js || android) var mfileSystem = ManifestBuilder.create("data"); var mloader:ManifestLoader = new ManifestLoader(mfileSystem); - var preloader = new ManifestProgress(mloader, () -> { - loader = mloader; - fileSystem = mfileSystem; - onLoadedFunc(); - }, scene2d); + var entries = mfileSystem.manifest.iterator(); + while (entries.hasNext()) { + var e = entries.next(); + e.load(); + } + loader = mloader; + fileSystem = mfileSystem; + onLoadedFunc(); #if js loader = mloader; fileSystem = mfileSystem; @@ -109,9 +112,6 @@ class ResourceLoader { }); worker.run(); #end - #if android - preloader.start(); - #end #end #if (hl && !android) onLoadedFunc(); diff --git a/src/Settings.hx b/src/Settings.hx index 38842bf3..d004b3ae 100644 --- a/src/Settings.hx +++ b/src/Settings.hx @@ -250,11 +250,11 @@ class Settings { return null; } - @:hlNative public static function open_url(url:String):Void {} + @:hlNative public static function open_web_url(url:String):Void {} #end public static function applySettings() { - #if hl + #if (hl && !android) Window.getInstance().resize(optionsSettings.screenWidth, optionsSettings.screenHeight); Window.getInstance().displayMode = optionsSettings.isFullScreen ? FullscreenResize : Windowed; #end @@ -489,9 +489,26 @@ class Settings { public static function init() { load(); #if hl - Window.getInstance().resize(Window.getInstance().width, Window.getInstance().height); + var wnd = Window.getInstance(); + // var zoomRatio = Window.getInstance().windowToPixelRatio; + // Window.getInstance().resize(Window.getInstance().width, Window.getInstance().height); // Window.getInstance().resize(optionsSettings.screenWidth, optionsSettings.screenHeight); - Window.getInstance().displayMode = optionsSettings.isFullScreen ? FullscreenResize : Windowed; + // Window.getInstance().displayMode = optionsSettings.isFullScreen ? FullscreenResize : Windowed; + var zoomRatio = Math.min(Window.getInstance().height, Window.getInstance().width) / 700; + Settings.zoomRatio = zoomRatio; + #if hl + Settings.optionsSettings.screenWidth = cast wnd.width; + Settings.optionsSettings.screenHeight = cast wnd.height; + #end + trace("Window resized to " + + Settings.optionsSettings.screenWidth + + "x" + + Settings.optionsSettings.screenHeight + + " (Zoom " + + zoomRatio + + ")"); + + // MarbleGame.canvas.scene2d.scaleMode = Zoom(zoomRatio); #end #if js Window.getInstance().propagateKeyEvents = true; diff --git a/src/fs/ManifestFileSystem.hx b/src/fs/ManifestFileSystem.hx index 677a6747..c157be25 100644 --- a/src/fs/ManifestFileSystem.hx +++ b/src/fs/ManifestFileSystem.hx @@ -140,9 +140,10 @@ class ManifestEntry extends FileEntry { }); } #else - if (onReady != null) + if (onReady != null) { onReady(); - // haxe.Timer.delay(onReady, 1); + // haxe.Timer.delay(onReady, 1); + } #end } diff --git a/src/fs/ManifestProgress.hx b/src/fs/ManifestProgress.hx index 580c13e9..cfbc423a 100644 --- a/src/fs/ManifestProgress.hx +++ b/src/fs/ManifestProgress.hx @@ -102,7 +102,7 @@ class ManifestProgress extends h2d.Object { function finish():Void { // setProgress(1, 1); - repaint(); + // repaint(); text.text = "All done!"; if (removeSelf) remove(); @@ -110,18 +110,18 @@ class ManifestProgress extends h2d.Object { } function showFileName(task:LoaderTask) { - repaint(); + // repaint(); // text.text = "Loading: " + task.entry.path; } function fileLoaded(task:LoaderTask) { - repaint(); + // repaint(); // setProgress(1, 1); // text.text = "Loaded : " + task.entry.path; } function fileProgress(task:LoaderTask) { - repaint(); + // repaint(); // setProgress(task.loaded, task.total); } } diff --git a/src/fs/TorqueFileSystem.hx b/src/fs/TorqueFileSystem.hx index ed774242..698bfe1d 100644 --- a/src/fs/TorqueFileSystem.hx +++ b/src/fs/TorqueFileSystem.hx @@ -9,7 +9,8 @@ class TorqueFileEntry extends LocalEntry { onReady(); #else // if (Settings.optionsSettings.fastLoad) - onReady(); + if (onReady != null) + haxe.Timer.delay(onReady, 1); // else { // if (onReady != null) // haxe.Timer.delay(onReady, 1); diff --git a/src/gui/GuiMLTextListCtrl.hx b/src/gui/GuiMLTextListCtrl.hx index 99ec72e6..676f2254 100644 --- a/src/gui/GuiMLTextListCtrl.hx +++ b/src/gui/GuiMLTextListCtrl.hx @@ -1,6 +1,7 @@ package gui; import h2d.filter.Filter; +import h2d.HtmlText; import h2d.Flow; import h3d.Engine; import h2d.Tile; @@ -52,7 +53,6 @@ class GuiMLTextListCtrl extends GuiControl { super(); this.font = font; this.texts = texts; - this._manualScroll = true; this.textObjs = []; this.dropShadow = filter; this._imageLoader = imageLoader; @@ -109,8 +109,7 @@ class GuiMLTextListCtrl extends GuiControl { for (i in 0...textObjs.length) { var text = textObjs[i]; text.setPosition(Math.floor((!scrollable ? renderRect.position.x : 0) + 5), - Math.floor((!scrollable ? renderRect.position.y : 0) - + (i * (text.font.size + 4 * Settings.uiScale) + (5 + textYOffset) * Settings.uiScale - this.scroll))); + Math.floor((!scrollable ? renderRect.position.y : 0) + (i * (text.font.size + 4) + 5 + textYOffset * Settings.uiScale - this.scroll))); if (_prevSelected == i) { text.textColor = selectedColor; @@ -118,20 +117,14 @@ class GuiMLTextListCtrl extends GuiControl { } } - public override function render(scene2d:Scene, ?parent:h2d.Flow) { + public override function render(scene2d:Scene) { var renderRect = this.getRenderRectangle(); - var htr = this.getHitTestRect(false); + var htr = this.getHitTestRect(); - if (parent != null) { - if (parent.contains(g)) - parent.removeChild(g); - parent.addChild(g); - - var off = this.getOffsetFromParent(); - parent.getProperties(g).isAbsolute = true; - - g.setPosition(off.x, off.y - this.scroll); - } + if (scene2d.contains(g)) + scene2d.removeChild(g); + scene2d.addChild(g); + g.setPosition(renderRect.position.x, renderRect.position.y - this.scroll); if (scrollable) { this.flow = new Flow(); @@ -141,18 +134,12 @@ class GuiMLTextListCtrl extends GuiControl { this.flow.multiline = true; this.flow.layout = Stack; this.flow.overflow = FlowOverflow.Hidden; + if (scene2d.contains(this.flow)) + scene2d.removeChild(this.flow); - if (parent != null) { - if (parent.contains(this.flow)) { - parent.removeChild(this.flow); - } - parent.addChild(this.flow); - var off = this.getOffsetFromParent(); - var props = parent.getProperties(this.flow); - props.isAbsolute = true; + scene2d.addChild(this.flow); - this.flow.setPosition(off.x, off.y); - } + this.flow.setPosition(htr.position.x, htr.position.y); } for (i in 0...textObjs.length) { @@ -170,8 +157,7 @@ class GuiMLTextListCtrl extends GuiControl { } text.setPosition(Math.floor((!scrollable ? renderRect.position.x : 0) + 5), - Math.floor((!scrollable ? renderRect.position.y : 0) - + (i * (text.font.size + 4 * Settings.uiScale) + (5 + textYOffset) * Settings.uiScale - this.scroll))); + Math.floor((!scrollable ? renderRect.position.y : 0) + (i * (text.font.size + 4) + 5 + textYOffset * Settings.uiScale - this.scroll))); if (_prevSelected == i) { text.textColor = selectedColor; @@ -179,11 +165,11 @@ class GuiMLTextListCtrl extends GuiControl { } redrawSelectionRect(htr); - super.render(scene2d, parent); + super.render(scene2d); } public function calculateFullHeight() { - return (this.texts.length * (font.size + 4 * Settings.uiScale)); + return (this.texts.length * (font.size + 4)); } public override function dispose() { @@ -203,11 +189,11 @@ class GuiMLTextListCtrl extends GuiControl { if (MarbleGame.canvas.scene2d.contains(text)) { MarbleGame.canvas.scene2d.removeChild(text); // Refresh "layer" } - text.remove(); } if (MarbleGame.canvas.scene2d.contains(g)) MarbleGame.canvas.scene2d.removeChild(g); - g.remove(); + if (MarbleGame.canvas.scene2d.contains(this.flow)) + MarbleGame.canvas.scene2d.removeChild(this.flow); } public override function onMouseMove(mouseState:MouseState) { @@ -215,7 +201,7 @@ class GuiMLTextListCtrl extends GuiControl { var renderRect = this.getRenderRectangle(); var yStart = renderRect.position.y; var dy = mousePos.y - yStart; - var hoverIndex = Math.floor(dy / (font.size + 4 * Settings.uiScale)); + var hoverIndex = Math.floor((dy + this.scroll) / (font.size + 4)); if (hoverIndex >= this.texts.length) { hoverIndex = -1; } @@ -247,7 +233,7 @@ class GuiMLTextListCtrl extends GuiControl { var renderRect = this.getRenderRectangle(); var yStart = renderRect.position.y; var dy = mousePos.y - yStart; - var selectedIndex = Math.floor((dy + this.scroll) / (font.size + 4 * Settings.uiScale)); + var selectedIndex = Math.floor((dy + this.scroll) / (font.size + 4)); if (selectedIndex >= this.texts.length) { selectedIndex = -1; } @@ -267,31 +253,26 @@ class GuiMLTextListCtrl extends GuiControl { g.clear(); g.beginFill(selectedFillColor); - var off = this.getOffsetFromParent(); // Check if we are between the top and bottom, render normally in that case - var topY = 2 * Settings.uiScale + (_prevSelected * (font.size + 4 * Settings.uiScale)) + g.y; - var bottomY = 2 * Settings.uiScale + (_prevSelected * (font.size + 4 * Settings.uiScale)) + g.y + font.size + 4 * Settings.uiScale; - var topRectY = off.y; - var bottomRectY = off.y + renderRect.extent.y; + var topY = 2 + (_prevSelected * (font.size + 4)) + g.y; + var bottomY = 2 + (_prevSelected * (font.size + 4)) + g.y + font.size + 4; + var topRectY = renderRect.position.y; + var bottomRectY = renderRect.position.y + renderRect.extent.y; if (topY >= topRectY && bottomY <= bottomRectY) - g.drawRect(0, 5 * Settings.uiScale - + (_prevSelected * (font.size + 4 * Settings.uiScale)) - - 3 * Settings.uiScale, renderRect.extent.x, - font.size - + 4 * Settings.uiScale); + g.drawRect(0, 5 + (_prevSelected * (font.size + 4)) - 3, renderRect.extent.x, font.size + 4); // We need to do math the draw the partially visible top selected if (topY <= topRectY && bottomY >= topRectY) { - g.drawRect(0, this.scroll, renderRect.extent.x, topY + font.size + 4 * Settings.uiScale - off.y); + g.drawRect(0, this.scroll, renderRect.extent.x, topY + font.size + 4 - renderRect.position.y); } // Same for the bottom if (topY <= bottomRectY && bottomY >= bottomRectY) { g.drawRect(0, this.scroll + renderRect.extent.y - font.size - - 4 * Settings.uiScale - + (topY + font.size + 4 * Settings.uiScale - bottomRectY), - renderRect.extent.x, off.y + - 4 + + (topY + font.size + 4 - bottomRectY), renderRect.extent.x, + renderRect.position.y + renderRect.extent.y - (topY)); } @@ -306,11 +287,11 @@ class GuiMLTextListCtrl extends GuiControl { var renderRect = this.getRenderRectangle(); this.scroll = scrollY; - var hittestrect = this.getHitTestRect(false); + var hittestrect = this.getHitTestRect(); for (i in 0...textObjs.length) { var text = textObjs[i]; - text.y = Math.floor((i * (text.font.size + 4 * Settings.uiScale) + (5 + textYOffset) * Settings.uiScale - scrollY)); - g.y = -scrollY; + text.y = Math.floor((i * (text.font.size + 4) + 5 + textYOffset * Settings.uiScale - scrollY)); + g.y = renderRect.position.y - scrollY; } redrawSelectionRect(hittestrect); } diff --git a/src/gui/MPPlayMissionGui.hx b/src/gui/MPPlayMissionGui.hx index 62c439da..c265451a 100644 --- a/src/gui/MPPlayMissionGui.hx +++ b/src/gui/MPPlayMissionGui.hx @@ -394,7 +394,7 @@ class MPPlayMissionGui extends GuiImage { chatScroll = new GuiScrollCtrl(ResourceLoader.getResource("data/ui/common/philscroll.png", ResourceLoader.getImage, this.imageResources).toTile()); chatScroll.position = new Vector(47, 282); chatScroll.extent = new Vector(407, 193); - chatScroll.childrenHandleScroll = true; + // chatScroll.childrenHandleScroll = true; chatScroll.scrollToBottom = true; window.addChild(chatScroll); @@ -402,7 +402,8 @@ class MPPlayMissionGui extends GuiImage { chatBox.text.textColor = 0x000000; chatBox.horizSizing = Width; chatBox.position = new Vector(0, 0); - chatBox.extent = new Vector(396, 1184); + chatBox.extent = new Vector(396, 193); + chatBox.scrollable = true; chatScroll.addChild(chatBox); var chatInputContainer = new GuiControl(); @@ -430,7 +431,7 @@ class MPPlayMissionGui extends GuiImage { } } chatInput.text.text = ""; - haxe.Timer.delay(() -> chatInput.text.focus(), 10); + // haxe.Timer.delay(() -> chatInput.text.focus(), 10); } @:privateAccess Key.keyPressed[e.keyCode] = 0; // consume keys } @@ -646,8 +647,8 @@ class MPPlayMissionGui extends GuiImage { redrawChat(); } - public override function render(scene2d:Scene, ?parent:h2d.Flow) { - super.render(scene2d, parent); + public override function render(scene2d:Scene) { + super.render(scene2d); setSelectedFunc(currentSelectionStatic); } diff --git a/src/gui/MPPreGameDlg.hx b/src/gui/MPPreGameDlg.hx index 057ee172..4bce5c10 100644 --- a/src/gui/MPPreGameDlg.hx +++ b/src/gui/MPPreGameDlg.hx @@ -198,7 +198,7 @@ class MPPreGameDlg extends GuiControl { .toTile()); playerListContainer.position = new Vector(57, 286); playerListContainer.extent = new Vector(525, 99); - playerListContainer.childrenHandleScroll = true; + // playerListContainer.childrenHandleScroll = true; // playerList.maxScrollY = 394 * Settings.uiScale; dialogImg.addChild(playerListContainer); diff --git a/src/gui/MPSearchGui.hx b/src/gui/MPSearchGui.hx index c7b787e4..61596fc0 100644 --- a/src/gui/MPSearchGui.hx +++ b/src/gui/MPSearchGui.hx @@ -167,7 +167,6 @@ class MPSearchGui extends GuiImage { scrollCtrl = new GuiScrollCtrl(ResourceLoader.getResource("data/ui/common/philscroll.png", ResourceLoader.getImage, this.imageResources).toTile()); scrollCtrl.position = new Vector(18, 68); scrollCtrl.extent = new Vector(447, 317); - scrollCtrl.childrenHandleScroll = true; this.addChild(scrollCtrl); searchMissionList = new GuiTextListCtrl(markerFelt24, displayList, 0xFFFFFF); diff --git a/src/gui/MainMenuGui.hx b/src/gui/MainMenuGui.hx index eee4a7e6..d861d634 100644 --- a/src/gui/MainMenuGui.hx +++ b/src/gui/MainMenuGui.hx @@ -54,7 +54,7 @@ class MainMenuGui extends GuiImage { siteButton.extent = new Vector(400, 30); siteButton.pressedAction = (sender) -> { #if sys - Settings.open_url("https://marbleblast.com"); + Settings.open_web_url("https://marbleblast.com"); #end #if js js.Browser.window.open("https://marbleblast.com"); @@ -198,7 +198,7 @@ class MainMenuGui extends GuiImage { kofi.extent = new Vector(143, 36); kofi.pressedAction = (sender) -> { #if sys - Settings.open_url("https://ko-fi.com/H2H5FRTTL"); + Settings.open_web_url("https://ko-fi.com/H2H5FRTTL"); #end #if js js.Browser.window.open("https://ko-fi.com/H2H5FRTTL"); @@ -213,7 +213,7 @@ class MainMenuGui extends GuiImage { github.extent = new Vector(94, 38); github.pressedAction = (sender) -> { #if sys - Settings.open_url("https://github.com/RandomityGuy/MBHaxe"); + Settings.open_web_url("https://github.com/RandomityGuy/MBHaxe"); #end #if js js.Browser.window.open("https://github.com/RandomityGuy/MBHaxe"); diff --git a/src/gui/OptionsDlg.hx b/src/gui/OptionsDlg.hx index b74d1147..4af1cc7c 100644 --- a/src/gui/OptionsDlg.hx +++ b/src/gui/OptionsDlg.hx @@ -68,12 +68,9 @@ class OptionsDlg extends GuiImage { generalBtn.extent = new Vector(134, 65); window.addChild(generalBtn); - var hotkeysBtn = new GuiButton(loadButtonImages2('data/ui/options/hotkeys')); + var hotkeysBtn = new GuiButton(loadButtonImages2('data/ui/options/hotkeys')); // touch settings hotkeysBtn.position = new Vector(325, 19); hotkeysBtn.extent = new Vector(134, 65); - if (touch) { - hotkeysBtn.disabled = true; - } window.addChild(hotkeysBtn); var onlineBtn = new GuiImage(ResourceLoader.getResource("data/ui/options/online_i.png", ResourceLoader.getImage, this.imageResources).toTile()); diff --git a/src/gui/PlayGui.hx b/src/gui/PlayGui.hx index a95f8d96..2734d27e 100644 --- a/src/gui/PlayGui.hx +++ b/src/gui/PlayGui.hx @@ -237,8 +237,6 @@ class PlayGui { }; Window.getInstance().addResizeEvent(resizeEv); - - onFinish(); } public function initTimer() { @@ -862,7 +860,7 @@ class PlayGui { public function setSpectateMenu(enabled:Bool) { if (enabled && spectatorCtrl == null) { initSpectatorMenu(); - spectatorCtrl.render(MarbleGame.canvas.scene2d, @:privateAccess playGuiCtrl._flow); + spectatorCtrl.render(MarbleGame.canvas.scene2d); blastFill.bmp.visible = false; blastFrame.bmp.visible = false; return true; @@ -1164,7 +1162,7 @@ class PlayGui { color: 0 }; // new h2d.filter.DropShadow(1.414, 0.785, 0x000000F, 1, 0, 0.4, 1, true); this.playGuiCtrl.addChild(middleMsg); - middleMsg.render(scene2d, @:privateAccess this.playGuiCtrl._flow); + middleMsg.render(scene2d); middleMsg.text.y -= (25 / playGuiCtrl.extent.y) * scene2d.height; this.middleMessages.push({ctrl: middleMsg, age: 0}); diff --git a/src/gui/PlayMissionGui.hx b/src/gui/PlayMissionGui.hx index 60360773..643b50ef 100644 --- a/src/gui/PlayMissionGui.hx +++ b/src/gui/PlayMissionGui.hx @@ -1117,7 +1117,7 @@ class PlayMissionGui extends GuiImage { kofi.extent = new Vector(143, 36); kofi.pressedAction = (sender) -> { #if sys - Settings.open_url("https://ko-fi.com/H2H5FRTTL"); + Settings.open_web_url("https://ko-fi.com/H2H5FRTTL"); #end #if js js.Browser.window.open("https://ko-fi.com/H2H5FRTTL"); diff --git a/src/touch/TouchInput.hx b/src/touch/TouchInput.hx index 9405a451..50157a58 100644 --- a/src/touch/TouchInput.hx +++ b/src/touch/TouchInput.hx @@ -233,8 +233,8 @@ class TouchInput { this.rightButton = new SpectatorChangeTargetButton(true); this.leftButton.add(par); this.rightButton.add(par); - this.leftButton.guiElement.render(MarbleGame.canvas.scene2d, @:privateAccess par._flow); - this.rightButton.guiElement.render(MarbleGame.canvas.scene2d, @:privateAccess par._flow); + this.leftButton.guiElement.render(MarbleGame.canvas.scene2d); + this.rightButton.guiElement.render(MarbleGame.canvas.scene2d); } } else { jumpButton.setVisible(true);