From 060209fb426de001cbdd4eaa1b1a42bc887fa98b Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Thu, 25 Apr 2024 23:42:20 +0530 Subject: [PATCH] get marble skins networked --- src/Marble.hx | 42 ++-- src/MarbleWorld.hx | 27 ++- src/gui/MarblePickerGui.hx | 426 ++++++++++++++++++------------------ src/modes/HuntMode.hx | 2 +- src/net/ClientConnection.hx | 9 + src/net/Net.hx | 6 +- src/net/NetCommands.hx | 3 +- 7 files changed, 281 insertions(+), 234 deletions(-) diff --git a/src/Marble.hx b/src/Marble.hx index 7885b294..85b68e3c 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -1,5 +1,6 @@ package src; +import gui.MarblePickerGui; import collision.CollisionPool; import net.NetPacket.MarbleNetFlags; import net.BitStream.OutputBitStream; @@ -375,9 +376,19 @@ class Marble extends GameObject { this.netCorrected = false; var marbleDts = new DtsObject(); - Console.log("Marble: " + Settings.optionsSettings.marbleModel + " (" + Settings.optionsSettings.marbleSkin + ")"); - marbleDts.dtsPath = Settings.optionsSettings.marbleModel; - marbleDts.matNameOverride.set("base.marble", Settings.optionsSettings.marbleSkin + ".marble"); + var marbleShader = ""; + if (connection == null) { // Our marble + Console.log("Marble: " + Settings.optionsSettings.marbleModel + " (" + Settings.optionsSettings.marbleSkin + ")"); + marbleDts.dtsPath = Settings.optionsSettings.marbleModel; + marbleDts.matNameOverride.set("base.marble", Settings.optionsSettings.marbleSkin + ".marble"); + marbleShader = Settings.optionsSettings.marbleShader; + } else { + var marbleData = MarblePickerGui.marbleData[connection.getMarbleId()]; + Console.log("Marble: " + marbleData.dts + " (" + marbleData.skin + ")"); + marbleDts.dtsPath = marbleData.dts; + marbleDts.matNameOverride.set("base.marble", marbleData.skin + ".marble"); + marbleShader = marbleData.shader; + } marbleDts.showSequences = false; marbleDts.useInstancing = false; var dtsFile = ResourceLoader.loadDts(marbleDts.dtsPath).resource; @@ -394,10 +405,7 @@ class Marble extends GameObject { var csky = level != null ? level.sky : (@:privateAccess MarbleGame.instance.previewWorld.sky); this.cubemapRenderer = new CubemapRenderer(MarbleGame.instance.scene, csky, !this.controllable && level != null); - if (Settings.optionsSettings.marbleShader == null - || Settings.optionsSettings.marbleShader == "Default" - || Settings.optionsSettings.marbleShader == "" - || !isUltra) { // Use this shit everywhere except ultra + if (marbleShader == null || marbleShader == "Default" || marbleShader == "" || !isUltra) { // Use this shit everywhere except ultra mat.mainPass.addShader(new MarbleReflection(this.cubemapRenderer.cubemap)); } else { // Generate tangents for next shaders, only for Ultra @@ -410,31 +418,31 @@ class Marble extends GameObject { mat.mainPass.removeShader(mat.textureShader); - if (Settings.optionsSettings.marbleShader == "ClassicGlassPureSphere") { + if (marbleShader == "ClassicGlassPureSphere") { var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble01.normal.png").resource; var classicGlassShader = new ClassicGlassPureSphere(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), 1); mat.mainPass.addShader(classicGlassShader); } - if (Settings.optionsSettings.marbleShader == "ClassicMarb") { + if (marbleShader == "ClassicMarb") { var classicMarb = new ClassicMarb(mat.texture, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), 1); mat.mainPass.addShader(classicMarb); } - if (Settings.optionsSettings.marbleShader == "ClassicMarb2") { + if (marbleShader == "ClassicMarb2") { var classicMarb2 = new ClassicMarb2(mat.texture, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), 1); mat.mainPass.addShader(classicMarb2); } - if (Settings.optionsSettings.marbleShader == "ClassicMarb3") { + if (marbleShader == "ClassicMarb3") { var marbSpecColor = new Vector(0.6, 0.6, 0.6, 0.6); var marbSpec = 12.0; - if (Settings.optionsSettings.marbleModel == "data/shapes/balls/marble16.dts") { + if (marbleDts.dtsPath == "data/shapes/balls/marble16.dts") { marbSpec = 6; marbSpecColor.set(0.2, 0.2, 0.2, 0.2); } - if (Settings.optionsSettings.marbleModel == "data/shapes/balls/marble31.dts") { + if (marbleDts.dtsPath == "data/shapes/balls/marble31.dts") { marbSpec = 24; marbSpecColor.set(0.3, 0.3, 0.3, 0.3); } @@ -442,7 +450,7 @@ class Marble extends GameObject { mat.mainPass.addShader(classicMarb3); } - if (Settings.optionsSettings.marbleShader == "ClassicMetal") { + if (marbleShader == "ClassicMetal") { var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble18.normal.png").resource; marbleNormal.wrap = Repeat; var classicMetalShader = new ClassicMetal(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, @@ -450,7 +458,7 @@ class Marble extends GameObject { mat.mainPass.addShader(classicMetalShader); } - if (Settings.optionsSettings.marbleShader == "ClassicMarbGlass20") { + if (marbleShader == "ClassicMarbGlass20") { var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble20.normal.png").resource; marbleNormal.wrap = Repeat; var classicGlassShader = new ClassicGlass(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, @@ -458,14 +466,14 @@ class Marble extends GameObject { mat.mainPass.addShader(classicGlassShader); } - if (Settings.optionsSettings.marbleShader == "ClassicMarbGlass18") { + if (marbleShader == "ClassicMarbGlass18") { var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble18.normal.png").resource; marbleNormal.wrap = Repeat; var classicGlassShader = new ClassicGlass(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), 1); mat.mainPass.addShader(classicGlassShader); } - if (Settings.optionsSettings.marbleShader == "CrystalMarb") { + if (marbleShader == "CrystalMarb") { var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/marble02.normal.png").resource; marbleNormal.wrap = Repeat; var classicGlassShader = new CrystalMarb(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 1); diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index ff29223d..56d3d0ec 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -1,5 +1,6 @@ package src; +import gui.MarblePickerGui; import gui.MultiplayerLevelSelectGui; import collision.CollisionPool; import net.GemPredictionStore; @@ -481,7 +482,12 @@ class MarbleWorld extends Scheduler { marblefiles.push("sound/use_blast.wav"); } // Hacky - marblefiles.push(StringTools.replace(Settings.optionsSettings.marbleModel, "data/", "")); + if (client == null) + marblefiles.push(StringTools.replace(Settings.optionsSettings.marbleModel, "data/", "")); + else { + var marbleDts = MarblePickerGui.marbleData[client.getMarbleId()].dts; + marblefiles.push(StringTools.replace(marbleDts, "data/", "")); + } // if (Settings.optionsSettings.marbleCategoryIndex == 0) // marblefiles.push("shapes/balls/" + Settings.optionsSettings.marbleSkin + ".marble.png"); // else @@ -1458,6 +1464,8 @@ class MarbleWorld extends Scheduler { // } this.tickSchedule(timeState.currentAttemptTime); + if (this._disposed) + return; if (this.isWatching && this.replay.currentPlaybackFrame.marbleStateFlags.has(UsedBlast)) this.marble.useBlast(timeState); @@ -1965,6 +1973,23 @@ class MarbleWorld extends Scheduler { } } + function mpFinish() { + playGui.setGuiVisibility(false); + Console.log("State End"); + #if js + var pointercontainer = js.Browser.document.querySelector("#pointercontainer"); + pointercontainer.hidden = false; + #end + if (Util.isTouchDevice()) { + MarbleGame.instance.touchInput.setControlsEnabled(false); + } + this.setCursorLock(false); + if (Net.isHost) { + MarbleGame.instance.quitMission(); + } + return 0; + } + function showFinishScreen() { if (this.isWatching) return 0; diff --git a/src/gui/MarblePickerGui.hx b/src/gui/MarblePickerGui.hx index 14060940..74aff465 100644 --- a/src/gui/MarblePickerGui.hx +++ b/src/gui/MarblePickerGui.hx @@ -11,220 +11,220 @@ import src.Settings; class MarblePickerGui extends GuiImage { var innerCtrl:GuiControl; - public function new() { - var marbleData = [ - { - name: "1", - dts: "data/shapes/balls/marble01.dts", - skin: "base", - shader: "ClassicGlassPureSphere" - }, - { - name: "2", - dts: "data/shapes/balls/marble03.dts", - skin: "base", - shader: "ClassicGlassPureSphere" - }, - { - name: "3", - dts: "data/shapes/balls/marble04.dts", - skin: "base", - shader: "ClassicGlassPureSphere" - }, - { - name: "4", - dts: "data/shapes/balls/marble05.dts", - skin: "base", - shader: "ClassicGlassPureSphere" - }, - { - name: "5", - dts: "data/shapes/balls/marble06.dts", - skin: "base", - shader: "ClassicGlassPureSphere" - }, - { - name: "6", - dts: "data/shapes/balls/marble07.dts", - skin: "base", - shader: "ClassicGlassPureSphere" - }, - { - name: "7", - dts: "data/shapes/balls/marble12.dts", - skin: "base", - shader: "ClassicGlassPureSphere" - }, - { - name: "8", - dts: "data/shapes/balls/marble15.dts", - skin: "base", - shader: "ClassicGlassPureSphere" - }, - { - name: "9", - dts: "data/shapes/balls/marble02.dts", - skin: "base", - shader: "CrystalMarb" - }, - { - name: "10", - dts: "data/shapes/balls/marble26.dts", - skin: "base", - shader: "CrystalMarb" - }, - { - name: "11", - dts: "data/shapes/balls/marble27.dts", - skin: "base", - shader: "CrystalMarb" - }, - { - name: "12", - dts: "data/shapes/balls/marble28.dts", - skin: "base", - shader: "CrystalMarb" - }, - { - name: "13", - dts: "data/shapes/balls/marble29.dts", - skin: "base", - shader: "CrystalMarb" - }, - { - name: "14", - dts: "data/shapes/balls/marble30.dts", - skin: "base", - shader: "CrystalMarb" - }, - { - name: "15", - dts: "data/shapes/balls/marble11.dts", - skin: "base", - shader: "ClassicMetal" - }, - { - name: "16", - dts: "data/shapes/balls/marble18.dts", - skin: "base", - shader: "ClassicMarbGlass18" - }, - { - name: "17", - dts: "data/shapes/balls/marble20.dts", - skin: "base", - shader: "ClassicMarbGlass20" - }, - { - name: "18", - dts: "data/shapes/balls/marble33.dts", - skin: "base", - shader: "ClassicMetal" - }, - { - name: "19", - dts: "data/shapes/balls/marble34.dts", - skin: "base", - shader: "ClassicMarb2" - }, - { - name: "20", - dts: "data/shapes/balls/marble09.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "21", - dts: "data/shapes/balls/marble13.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "22", - dts: "data/shapes/balls/marble14.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "23", - dts: "data/shapes/balls/marble17.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "24", - dts: "data/shapes/balls/marble19.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "25", - dts: "data/shapes/balls/marble21.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "26", - dts: "data/shapes/balls/marble22.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "27", - dts: "data/shapes/balls/marble23.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "28", - dts: "data/shapes/balls/marble24.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "29", - dts: "data/shapes/balls/marble25.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "30", - dts: "data/shapes/balls/marble31.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "31", - dts: "data/shapes/balls/marble32.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "32", - dts: "data/shapes/balls/marble08.dts", - skin: "base", - shader: "ClassicMarb" - }, - { - name: "33", - dts: "data/shapes/balls/marble10.dts", - skin: "base", - shader: "ClassicMarb2" - }, - { - name: "34", - dts: "data/shapes/balls/marble16.dts", - skin: "base", - shader: "ClassicMarb3" - }, - { - name: "35", - dts: "data/shapes/balls/marble35.dts", - skin: "base", - shader: "ClassicMarb3" - } - ]; + static var marbleData = [ + { + name: "1", + dts: "data/shapes/balls/marble01.dts", + skin: "base", + shader: "ClassicGlassPureSphere" + }, + { + name: "2", + dts: "data/shapes/balls/marble03.dts", + skin: "base", + shader: "ClassicGlassPureSphere" + }, + { + name: "3", + dts: "data/shapes/balls/marble04.dts", + skin: "base", + shader: "ClassicGlassPureSphere" + }, + { + name: "4", + dts: "data/shapes/balls/marble05.dts", + skin: "base", + shader: "ClassicGlassPureSphere" + }, + { + name: "5", + dts: "data/shapes/balls/marble06.dts", + skin: "base", + shader: "ClassicGlassPureSphere" + }, + { + name: "6", + dts: "data/shapes/balls/marble07.dts", + skin: "base", + shader: "ClassicGlassPureSphere" + }, + { + name: "7", + dts: "data/shapes/balls/marble12.dts", + skin: "base", + shader: "ClassicGlassPureSphere" + }, + { + name: "8", + dts: "data/shapes/balls/marble15.dts", + skin: "base", + shader: "ClassicGlassPureSphere" + }, + { + name: "9", + dts: "data/shapes/balls/marble02.dts", + skin: "base", + shader: "CrystalMarb" + }, + { + name: "10", + dts: "data/shapes/balls/marble26.dts", + skin: "base", + shader: "CrystalMarb" + }, + { + name: "11", + dts: "data/shapes/balls/marble27.dts", + skin: "base", + shader: "CrystalMarb" + }, + { + name: "12", + dts: "data/shapes/balls/marble28.dts", + skin: "base", + shader: "CrystalMarb" + }, + { + name: "13", + dts: "data/shapes/balls/marble29.dts", + skin: "base", + shader: "CrystalMarb" + }, + { + name: "14", + dts: "data/shapes/balls/marble30.dts", + skin: "base", + shader: "CrystalMarb" + }, + { + name: "15", + dts: "data/shapes/balls/marble11.dts", + skin: "base", + shader: "ClassicMetal" + }, + { + name: "16", + dts: "data/shapes/balls/marble18.dts", + skin: "base", + shader: "ClassicMarbGlass18" + }, + { + name: "17", + dts: "data/shapes/balls/marble20.dts", + skin: "base", + shader: "ClassicMarbGlass20" + }, + { + name: "18", + dts: "data/shapes/balls/marble33.dts", + skin: "base", + shader: "ClassicMetal" + }, + { + name: "19", + dts: "data/shapes/balls/marble34.dts", + skin: "base", + shader: "ClassicMarb2" + }, + { + name: "20", + dts: "data/shapes/balls/marble09.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "21", + dts: "data/shapes/balls/marble13.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "22", + dts: "data/shapes/balls/marble14.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "23", + dts: "data/shapes/balls/marble17.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "24", + dts: "data/shapes/balls/marble19.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "25", + dts: "data/shapes/balls/marble21.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "26", + dts: "data/shapes/balls/marble22.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "27", + dts: "data/shapes/balls/marble23.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "28", + dts: "data/shapes/balls/marble24.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "29", + dts: "data/shapes/balls/marble25.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "30", + dts: "data/shapes/balls/marble31.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "31", + dts: "data/shapes/balls/marble32.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "32", + dts: "data/shapes/balls/marble08.dts", + skin: "base", + shader: "ClassicMarb" + }, + { + name: "33", + dts: "data/shapes/balls/marble10.dts", + skin: "base", + shader: "ClassicMarb2" + }, + { + name: "34", + dts: "data/shapes/balls/marble16.dts", + skin: "base", + shader: "ClassicMarb3" + }, + { + name: "35", + dts: "data/shapes/balls/marble35.dts", + skin: "base", + shader: "ClassicMarb3" + } + ]; + public function new() { var res = ResourceLoader.getImage("data/ui/game/CloudBG.jpg").resource.toTile(); super(res); diff --git a/src/modes/HuntMode.hx b/src/modes/HuntMode.hx index 752c8162..d4f74dab 100644 --- a/src/modes/HuntMode.hx +++ b/src/modes/HuntMode.hx @@ -635,7 +635,7 @@ class HuntMode extends NullMode { NetCommands.timerRanOut(); } if (!level.isWatching) { - @:privateAccess level.schedule(level.timeState.currentAttemptTime, () -> cast level.showFinishScreen()); + @:privateAccess level.schedule(level.timeState.currentAttemptTime + 5, () -> cast level.mpFinish()); } } else { var myScore = { diff --git a/src/net/ClientConnection.hx b/src/net/ClientConnection.hx index 3bb7e1ef..0611d680 100644 --- a/src/net/ClientConnection.hx +++ b/src/net/ClientConnection.hx @@ -59,6 +59,7 @@ abstract class GameConnection { var name:String; var lobbyReady:Bool; var platform:NetPlatform; + var marbleId:Int; function new(id:Int) { this.id = id; @@ -107,4 +108,12 @@ abstract class GameConnection { public inline function setName(value:String) { name = value; } + + public inline function setMarbleId(value:Int) { + marbleId = value; + } + + public inline function getMarbleId() { + return marbleId; + } } diff --git a/src/net/Net.hx b/src/net/Net.hx index 029db428..64905a1a 100644 --- a/src/net/Net.hx +++ b/src/net/Net.hx @@ -303,6 +303,7 @@ class Net { b.writeByte(c); b.writeByte(v.lobbyReady ? 1 : 0); b.writeByte(v.platform); + b.writeByte(v.marbleId); var name = v.getName(); b.writeByte(name.length); for (i in 0...name.length) { @@ -313,6 +314,7 @@ class Net { b.writeByte(0); b.writeByte(Net.lobbyHostReady ? 1 : 0); b.writeByte(getPlatform()); + b.writeByte(Settings.optionsSettings.marbleIndex); var name = Settings.highscoreName; b.writeByte(name.length); for (i in 0...name.length) { @@ -332,7 +334,7 @@ class Net { case ClientIdAssign: clientId = input.readByte(); // 8 bit client id, hopefully we don't exceed this Console.log('Client ID set to ${clientId}'); - NetCommands.setPlayerName(clientId, Settings.highscoreName); // Send our player name to the server + NetCommands.setPlayerData(clientId, Settings.highscoreName, Settings.optionsSettings.marbleIndex); // Send our player name to the server NetCommands.transmitPlatform(clientId, getPlatform()); // send our platform too case Ping: @@ -417,6 +419,7 @@ class Net { var id = input.readByte(); var cready = input.readByte() == 1; var platform = input.readByte(); + var marble = input.readByte(); if (id != 0 && id != Net.clientId && !clientIdMap.exists(id)) { Console.log('Adding ghost connection ${id}'); addGhost(id); @@ -429,6 +432,7 @@ class Net { } if (clientIdMap.exists(id)) { clientIdMap[id].setName(name); + clientIdMap[id].setMarbleId(marble); clientIdMap[id].lobbyReady = cready; clientIdMap[id].platform = platform; } diff --git a/src/net/NetCommands.hx b/src/net/NetCommands.hx index afedc87c..13735594 100644 --- a/src/net/NetCommands.hx +++ b/src/net/NetCommands.hx @@ -124,9 +124,10 @@ class NetCommands { } } - @:rpc(client) public static function setPlayerName(clientId:Int, name:String) { + @:rpc(client) public static function setPlayerData(clientId:Int, name:String, marble:Int) { if (Net.isHost) { Net.clientIdMap[clientId].setName(name); + Net.clientIdMap[clientId].setMarbleId(marble); if (MarbleGame.canvas.content is MultiplayerLevelSelectGui) { cast(MarbleGame.canvas.content, MultiplayerLevelSelectGui).updateLobbyNames(); }