make everything properly resizable

This commit is contained in:
RandomityGuy 2023-06-28 22:29:05 +05:30
parent 6948f16723
commit 2ceeb6ddb5
16 changed files with 220 additions and 19 deletions

View file

@ -171,7 +171,6 @@ class MarbleGame {
JSPlatform.initFullscreenEnforcer();
Window.getInstance().removeEventTarget(@:privateAccess Key.onEvent);
Window.getInstance().addResizeEvent(() -> {});
#end
}

View file

@ -1,5 +1,6 @@
package src;
import hxd.Window;
import src.ResourceLoader;
import shaders.GammaRamp;
import h3d.mat.Texture;
@ -32,6 +33,7 @@ class Renderer extends h3d.scene.Renderer {
blurShader = new ScreenFx<Blur>(new Blur());
copyPass = new h3d.pass.Copy();
sfxBuffer = new Texture(512, 512, [Target]);
Window.getInstance().addResizeEvent(() -> onResize());
}
public inline static function getSfxBuffer() {
@ -46,6 +48,17 @@ class Renderer extends h3d.scene.Renderer {
p.draw(passes, sort);
}
function onResize() {
if (backBuffer != null) {
backBuffer.dispose();
backBuffer = null;
}
if (glowBuffer != null) {
glowBuffer.dispose();
glowBuffer = null;
}
}
override function getPassByName(name:String):h3d.pass.Base {
if (name == "alpha"
|| name == "additive"
@ -73,8 +86,9 @@ class Renderer extends h3d.scene.Renderer {
if (has("normal"))
renderPass(normal, get("normal"));
if (growBufferTemps == null) {
if (glowBuffer == null)
glowBuffer = ctx.textures.allocTarget("glowBuffer", ctx.engine.width, ctx.engine.height);
if (growBufferTemps == null) {
growBufferTemps = [
ctx.textures.allocTarget("gb1", 320, 320, false),
ctx.textures.allocTarget("gb2", 320, 320, false),

View file

@ -7,6 +7,9 @@ import src.ResourceLoader;
import src.Settings;
class AboutMenuOptionsGui extends GuiImage {
var innerCtrl:GuiControl;
var btnList:GuiXboxList;
public function new(pauseGui:Bool = false) {
var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile();
super(res);
@ -28,7 +31,7 @@ class AboutMenuOptionsGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -48,7 +51,7 @@ class AboutMenuOptionsGui extends GuiImage {
rootTitle.text.alpha = 0.5;
innerCtrl.addChild(rootTitle);
var btnList = new GuiXboxList();
btnList = new GuiXboxList();
btnList.position = new Vector(70 - offsetX, 165);
btnList.horizSizing = Left;
btnList.extent = new Vector(502, 500);
@ -114,4 +117,17 @@ class AboutMenuOptionsGui extends GuiImage {
backButton.pressedAction = (e) -> MarbleGame.canvas.setContent(new OptionsListGui());
bottomBar.addChild(backButton);
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
btnList.position = new Vector(70 - offsetX, 165);
super.onResize(width, height);
}
}

View file

@ -1,5 +1,6 @@
package gui;
import hxd.Window;
import src.Console;
import src.MarbleGame;
import h3d.Vector;
@ -21,6 +22,10 @@ class Canvas extends GuiControl {
this.extent = new Vector(640, 480);
this.horizSizing = Width;
this.vertSizing = Height;
Window.getInstance().addResizeEvent(() -> {
var wnd = Window.getInstance();
onResize(wnd.width, wnd.height);
});
}
public function setContent(content:GuiControl) {

View file

@ -9,6 +9,9 @@ import src.ResourceLoader;
import src.Settings;
class DifficultySelectGui extends GuiImage {
var innerCtrl:GuiControl;
var btnList:GuiXboxList;
public function new() {
var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile();
super(res);
@ -30,7 +33,7 @@ class DifficultySelectGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -50,7 +53,7 @@ class DifficultySelectGui extends GuiImage {
rootTitle.text.alpha = 0.5;
innerCtrl.addChild(rootTitle);
var btnList = new GuiXboxList();
btnList = new GuiXboxList();
btnList.position = new Vector(70 - offsetX, 165);
btnList.horizSizing = Left;
btnList.extent = new Vector(502, 500);
@ -84,4 +87,17 @@ class DifficultySelectGui extends GuiImage {
backButton.pressedAction = (e) -> MarbleGame.canvas.setContent(new MainMenuGui());
bottomBar.addChild(backButton);
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
btnList.position = new Vector(70 - offsetX, 165);
super.onResize(width, height);
}
}

View file

@ -16,6 +16,8 @@ import src.Util;
class EndGameGui extends GuiImage {
var mission:Mission;
var innerCtrl:GuiControl;
var endGameWnd:GuiImage;
var scoreSubmitted:Bool = false;
@ -43,7 +45,7 @@ class EndGameGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -63,7 +65,7 @@ class EndGameGui extends GuiImage {
rootTitle.text.alpha = 0.5;
innerCtrl.addChild(rootTitle);
var endGameWnd = new GuiImage(ResourceLoader.getResource("data/ui/xbox/endGameWindow.png", ResourceLoader.getImage, this.imageResources).toTile());
endGameWnd = new GuiImage(ResourceLoader.getResource("data/ui/xbox/endGameWindow.png", ResourceLoader.getImage, this.imageResources).toTile());
endGameWnd.horizSizing = Left;
endGameWnd.vertSizing = Top;
endGameWnd.position = new Vector(80 - offsetX, 170 - offsetY);
@ -157,4 +159,17 @@ class EndGameGui extends GuiImage {
nextButton.pressedAction = (e) -> continueFunc(nextButton);
bottomBar.addChild(nextButton);
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
endGameWnd.position = new Vector(80 - offsetX, 170 - offsetY);
super.onResize(width, height);
}
}

View file

@ -8,6 +8,9 @@ import src.ResourceLoader;
import src.Settings;
class ExitGameDlg extends GuiImage {
var innerCtrl:GuiControl;
var btnList:GuiXboxList;
public function new(yesFunc:GuiControl->Void, noFunc:GuiControl->Void, restartFunc:GuiControl->Void) {
var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile();
super(res);
@ -31,7 +34,7 @@ class ExitGameDlg extends GuiImage {
var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
// innerCtrl.extent = new Vector(640, 480);
@ -64,7 +67,7 @@ class ExitGameDlg extends GuiImage {
levelTitle.text.text = 'Level ${MarbleGame.instance.world.mission.index + 1}';
innerCtrl.addChild(levelTitle);
var btnList = new GuiXboxList();
btnList = new GuiXboxList();
btnList.position = new Vector(70 - offsetX / 2, 95);
btnList.horizSizing = Left;
btnList.extent = new Vector(502, 500);
@ -84,4 +87,17 @@ class ExitGameDlg extends GuiImage {
MarbleGame.canvas.setContent(new MainMenuGui());
});
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
btnList.position = new Vector(70 - offsetX / 2, 95);
super.onResize(width, height);
}
}

View file

@ -311,4 +311,10 @@ class GuiControl {
c.renderEngine(engine);
}
}
public function onResize(width:Int, height:Int) {
for (c in this.children) {
c.onResize(width, height);
}
}
}

View file

@ -18,6 +18,8 @@ class HelpCreditsGui extends GuiImage {
var curScroll:Float = -50;
var doScroll = false;
var innerCtrl:GuiControl;
public function new(index:Int, pauseGui:Bool = false) {
var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile();
super(res);
@ -39,7 +41,7 @@ class HelpCreditsGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -173,4 +175,16 @@ class HelpCreditsGui extends GuiImage {
wndTxtBg.onScroll(0, realScroll);
}
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
super.onResize(width, height);
}
}

View file

@ -8,6 +8,8 @@ import src.Settings;
import src.Util;
class InputOptionsGui extends GuiImage {
var innerCtrl:GuiControl;
public function new(pauseGui:Bool = false) {
var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile();
super(res);
@ -29,7 +31,7 @@ class InputOptionsGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -155,4 +157,16 @@ class InputOptionsGui extends GuiImage {
};
bottomBar.addChild(backButton);
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
super.onResize(width, height);
}
}

View file

@ -15,6 +15,8 @@ class LevelSelectGui extends GuiImage {
static var currentSelectionStatic:Int = 0;
static var currentDifficultyStatic:String = "beginner";
var innerCtrl:GuiControl;
public function new(difficulty:String) {
var res = ResourceLoader.getImage("data/ui/game/CloudBG.jpg").resource.toTile();
super(res);
@ -100,7 +102,7 @@ class LevelSelectGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
@ -238,4 +240,16 @@ class LevelSelectGui extends GuiImage {
setLevel(currentSelectionStatic);
innerCtrl.addChild(levelSelectOpts);
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
super.onResize(width, height);
}
}

View file

@ -13,6 +13,9 @@ import src.Marbleland;
import src.MissionList;
class MainMenuGui extends GuiImage {
var innerCtrl:GuiControl;
var btnList:GuiXboxList;
public function new() {
var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile();
super(res);
@ -34,7 +37,7 @@ class MainMenuGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -51,7 +54,7 @@ class MainMenuGui extends GuiImage {
glogo.extent = new Vector(128, 128);
innerCtrl.addChild(glogo);
var btnList = new GuiXboxList();
btnList = new GuiXboxList();
btnList.position = new Vector(70 - offsetX, 95);
btnList.horizSizing = Left;
btnList.extent = new Vector(502, 500);
@ -151,4 +154,17 @@ class MainMenuGui extends GuiImage {
this.addChild(kofi);
#end
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
btnList.position = new Vector(70 - offsetX, 95);
super.onResize(width, height);
}
}

View file

@ -9,6 +9,8 @@ import src.ResourceLoader;
import src.Settings;
class MarblePickerGui extends GuiImage {
var innerCtrl:GuiControl;
public function new() {
var marbleData = [
{
@ -251,7 +253,7 @@ class MarblePickerGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -338,4 +340,16 @@ class MarblePickerGui extends GuiImage {
bottomBar.addChild(backButton);
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
super.onResize(width, height);
}
}

View file

@ -8,6 +8,8 @@ import src.Settings;
import src.Util;
class MiscOptionsGui extends GuiImage {
var innerCtrl:GuiControl;
public function new(pauseGui:Bool = false) {
var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile();
super(res);
@ -29,7 +31,7 @@ class MiscOptionsGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -114,4 +116,16 @@ class MiscOptionsGui extends GuiImage {
};
bottomBar.addChild(backButton);
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
super.onResize(width, height);
}
}

View file

@ -7,6 +7,8 @@ import src.ResourceLoader;
import src.Settings;
class OptionsListGui extends GuiImage {
var innerCtrl:GuiControl;
public function new(pauseGui:Bool = false) {
var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile();
super(res);
@ -28,7 +30,7 @@ class OptionsListGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -98,4 +100,16 @@ class OptionsListGui extends GuiImage {
backButton.pressedAction = (e) -> MarbleGame.canvas.setContent(new MainMenuGui());
bottomBar.addChild(backButton);
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
super.onResize(width, height);
}
}

View file

@ -8,6 +8,8 @@ import src.Settings;
import src.Util;
class VideoOptionsGui extends GuiImage {
var innerCtrl:GuiControl;
public function new(pauseGui:Bool = false) {
var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile();
super(res);
@ -29,7 +31,7 @@ class VideoOptionsGui extends GuiImage {
var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height;
var innerCtrl = new GuiControl();
innerCtrl = new GuiControl();
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
innerCtrl.horizSizing = Width;
@ -176,4 +178,16 @@ class VideoOptionsGui extends GuiImage {
};
bottomBar.addChild(backButton);
}
override function onResize(width:Int, height:Int) {
var offsetX = (width - 1280) / 2;
var offsetY = (height - 720) / 2;
var subX = 640 - (width - offsetX) * 640 / width;
var subY = 480 - (height - offsetY) * 480 / height;
innerCtrl.position = new Vector(offsetX, offsetY);
innerCtrl.extent = new Vector(640 - subX, 480 - subY);
super.onResize(width, height);
}
}