From 2416a7119ebc7e408618bd9f609868c0ed01881c Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:45:42 +0530 Subject: [PATCH] radar fixes and spectator ui (pc) --- src/CameraController.hx | 4 ++ src/Marble.hx | 3 +- src/MarbleWorld.hx | 6 ++- src/Radar.hx | 13 ++--- src/gui/PlayGui.hx | 115 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 133 insertions(+), 8 deletions(-) diff --git a/src/CameraController.hx b/src/CameraController.hx index 1e418c21..8b6d8880 100644 --- a/src/CameraController.hx +++ b/src/CameraController.hx @@ -127,10 +127,12 @@ class CameraController extends Object { public function enableSpectate() { spectate = true; + @:privateAccess this.level.playGui.setSpectateMenu(true); } public function stopSpectate() { spectate = false; + @:privateAccess this.level.playGui.setSpectateMenu(false); } public function orbit(mouseX:Float, mouseY:Float, isTouch:Bool = false) { @@ -299,6 +301,7 @@ class CameraController extends Object { var orientationQuat = level.getOrientationQuat(currentTime); if (spectateMarbleIndex == -1) { + @:privateAccess level.playGui.setSpectateMenuText(0); var up = new Vector(0, 0, 1); up.transform(orientationQuat.toMatrix()); var directionVector = new Vector(1, 0, 0); @@ -362,6 +365,7 @@ class CameraController extends Object { camera.up = up; camera.target = camera.pos.add(directionVector); } else { + @:privateAccess level.playGui.setSpectateMenuText(1); if (Key.isPressed(Settings.controlsSettings.left)) { spectateMarbleIndex = (spectateMarbleIndex - 1 + level.marbles.length) % level.marbles.length; @:privateAccess while (level.marbles[spectateMarbleIndex].connection == null diff --git a/src/Marble.hx b/src/Marble.hx index 9f85b0a6..73e22214 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -1665,8 +1665,9 @@ class Marble extends GameObject { this.collisionWorld.updateTransform(this.collider); this.setPosition(1e8, 1e8, 1e8); - if (Net.clientSpectate && this.connection == null) + if (Net.clientSpectate && this.connection == null) { this.camera.enableSpectate(); + } return; } } diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index c84734aa..b9377728 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -384,7 +384,11 @@ class MarbleWorld extends Scheduler { MarbleGame.canvas.clearContent(); if (this.endPad != null) this.endPad.generateCollider(); - this.playGui.formatGemCounter(this.gemCount, this.totalGems); + if (this.isMultiplayer) { + this.playGui.formatGemHuntCounter(0); + } else { + this.playGui.formatGemCounter(this.gemCount, this.totalGems); + } Console.log("MISSION LOADED"); start(); }); diff --git a/src/Radar.hx b/src/Radar.hx index 44c8979b..7f801612 100644 --- a/src/Radar.hx +++ b/src/Radar.hx @@ -193,11 +193,11 @@ class Radar { function renderName(pos:Vector, marble:Marble, opacity:Float) { if (!marbleNameTexts.exists(marble)) { - var arialb14fontdata = ResourceLoader.getFileEntry("data/font/Arial Bold.fnt"); - var arialb14b = new BitmapFont(arialb14fontdata.entry); - @:privateAccess arialb14b.loader = ResourceLoader.loader; - var arialBold14 = arialb14b.toSdfFont(cast 16 * Settings.uiScale, MultiChannel); - var txt = new h2d.Text(arialBold14, scene2d); + var markerFelt32fontdata = ResourceLoader.getFileEntry("data/font/MarkerFelt.fnt"); + var markerFelt32b = new BitmapFont(markerFelt32fontdata.entry); + @:privateAccess markerFelt32b.loader = ResourceLoader.loader; + var markerFelt18 = markerFelt32b.toSdfFont(cast 14 * Settings.uiScale, MultiChannel); + var txt = new h2d.Text(markerFelt18, scene2d); marbleNameTexts.set(marble, txt); txt.textColor = 0xFFFF00; } @@ -209,7 +209,8 @@ class Radar { function dontRenderName(marble:Marble) { if (marbleNameTexts.exists(marble)) { - marbleNameTexts.get(marble).alpha = 0; + var el = marbleNameTexts.get(marble); + el.alpha = 0; } } } diff --git a/src/gui/PlayGui.hx b/src/gui/PlayGui.hx index 80e9ad07..837694cb 100644 --- a/src/gui/PlayGui.hx +++ b/src/gui/PlayGui.hx @@ -97,6 +97,9 @@ class PlayGui { var playGuiCtrl:GuiControl; var chatCtrl:ChatCtrl; + var spectatorCtrl:GuiControl; + var spectatorTxt:GuiMLText; + var spectatorTxtMode:Int = -1; var resizeEv:Void->Void; @@ -124,6 +127,11 @@ class PlayGui { chatCtrl = null; } + if (spectatorCtrl != null) { + spectatorCtrl.dispose(); + spectatorCtrl = null; + } + gemImageScene.dispose(); gemImageSceneTarget.dispose(); gemImageSceneTargetBitmap.remove(); @@ -201,6 +209,8 @@ class PlayGui { if (MarbleGame.instance.world.isMultiplayer) { initPlayerList(); initChatHud(); + if (Net.hostSpectate || Net.clientSpectate) + initSpectatorMenu(); } if (Util.isTouchDevice()) { @@ -689,6 +699,111 @@ class PlayGui { redrawPlayerList(); } + public function initSpectatorMenu() { + spectatorCtrl = new GuiControl(); + spectatorCtrl.vertSizing = Top; + spectatorCtrl.position = new Vector(0, 330); + spectatorCtrl.extent = new Vector(302, 150); + + var specWnd = new GuiImage(ResourceLoader.getResource("data/ui/mp/play/spectator.png", ResourceLoader.getImage, this.imageResources).toTile()); + specWnd.horizSizing = Width; + specWnd.vertSizing = Top; + specWnd.position = new Vector(0, 0); + specWnd.extent = new Vector(302, 150); + + spectatorCtrl.addChild(specWnd); + + var domcasual24fontdata = ResourceLoader.getFileEntry("data/font/DomCasualD.fnt"); + var domcasual24b = new BitmapFont(domcasual24fontdata.entry); + @:privateAccess domcasual24b.loader = ResourceLoader.loader; + var domcasual24 = domcasual24b.toSdfFont(cast 20 * Settings.uiScale, MultiChannel); + + var domcasual32 = domcasual24b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel); + + var arial14fontdata = ResourceLoader.getFileEntry("data/font/arial.fnt"); + var arial14b = new BitmapFont(arial14fontdata.entry); + @:privateAccess arial14b.loader = ResourceLoader.loader; + var arial14 = arial14b.toSdfFont(cast 12 * Settings.uiScale, MultiChannel); + + var arialb14fontdata = ResourceLoader.getFileEntry("data/font/Arial Bold.fnt"); + var arialb14b = new BitmapFont(arialb14fontdata.entry); + @:privateAccess arialb14b.loader = ResourceLoader.loader; + var arialBold14 = arialb14b.toSdfFont(cast 12 * Settings.uiScale, MultiChannel); + + 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 20 * Settings.uiScale, MultiChannel); + var markerFelt20 = markerFelt32b.toSdfFont(cast 18.5 * Settings.uiScale, MultiChannel); + var markerFelt18 = markerFelt32b.toSdfFont(cast 17 * Settings.uiScale, MultiChannel); + var markerFelt26 = markerFelt32b.toSdfFont(cast 22 * Settings.uiScale, MultiChannel); + + function mlFontLoader(text:String) { + switch (text) { + case "DomCasual24": + return domcasual24; + case "Arial14": + return arial14; + case "ArialBold14": + return arialBold14; + case "MarkerFelt32": + return markerFelt32; + case "MarkerFelt24": + return markerFelt24; + case "MarkerFelt18": + return markerFelt18; + case "MarkerFelt20": + return markerFelt20; + case "MarkerFelt26": + return markerFelt26; + default: + return null; + } + } + + spectatorTxt = new GuiMLText(markerFelt24, mlFontLoader); + spectatorTxt.position = new Vector(6, 9); + spectatorTxt.extent = new Vector(282, 14); + spectatorTxt.text.textColor = 0x000000; + + specWnd.addChild(spectatorTxt); + playGuiCtrl.addChild(spectatorCtrl); + } + + public function setSpectateMenu(enabled:Bool) { + if (enabled && spectatorCtrl == null) { + initSpectatorMenu(); + playGuiCtrl.render(MarbleGame.canvas.scene2d); + blastFill.bmp.visible = false; + blastFrame.bmp.visible = false; + } + if (!enabled && spectatorCtrl != null) { + spectatorCtrl.dispose(); + spectatorCtrl = null; + blastFill.bmp.visible = true; + blastFrame.bmp.visible = true; + spectatorTxtMode = -1; + } + } + + public function setSpectateMenuText(mode:Int) { + if (spectatorTxtMode != mode) { + if (mode == 0) { + spectatorTxt.text.text = '
Spectator Info
+ Toggle Fly / Orbit: ${Util.getKeyForButton2(Settings.controlsSettings.blast)}'; + } + if (mode == 1) { + spectatorTxt.text.text = 'Spectator Info
+ Toggle Fly / Orbit: ${Util.getKeyForButton2(Settings.controlsSettings.blast)} +