mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2026-02-15 10:45:58 +00:00
player kicking, marble skin change networking, minor improvements
This commit is contained in:
parent
08f057dc6c
commit
8b612fd089
11 changed files with 170 additions and 34 deletions
Binary file not shown.
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 6.5 KiB |
|
|
@ -392,7 +392,7 @@ class Marble extends GameObject {
|
|||
marbleDts.dtsPath = Settings.optionsSettings.marbleModel;
|
||||
marbleDts.matNameOverride.set("base.marble", Settings.optionsSettings.marbleSkin + ".marble");
|
||||
} else {
|
||||
var marbleData = MarbleSelectGui.marbleData[0][connection.getMarbleId()]; // FIXME category support
|
||||
var marbleData = MarbleSelectGui.marbleData[connection.getMarbleCatId()][connection.getMarbleId()]; // FIXME category support
|
||||
Console.log("Marble: " + marbleData.dts + " (" + marbleData.skin + ")");
|
||||
marbleDts.dtsPath = marbleData.dts;
|
||||
marbleDts.matNameOverride.set("base.marble", marbleData.skin + ".marble");
|
||||
|
|
@ -557,7 +557,7 @@ class Marble extends GameObject {
|
|||
|
||||
this.megaHelicopter = new DtsObject();
|
||||
this.megaHelicopter.dtsPath = "data/shapes/items/megahelicopter.dts";
|
||||
this.megaHelicopter.useInstancing = true;
|
||||
this.megaHelicopter.useInstancing = false;
|
||||
this.megaHelicopter.identifier = "MegaHelicopter";
|
||||
this.megaHelicopter.showSequences = true;
|
||||
this.megaHelicopter.isBoundingBoxCollideable = false;
|
||||
|
|
|
|||
|
|
@ -1290,10 +1290,11 @@ class MarbleWorld extends Scheduler {
|
|||
restart(marble, true);
|
||||
}
|
||||
|
||||
startTime = this.timeState.timeSinceLoad + 3.5;
|
||||
startTime = this.timeState.timeSinceLoad + 4;
|
||||
|
||||
if (Net.isHost) {
|
||||
haxe.Timer.delay(() -> {
|
||||
this.gameMode.onRestart();
|
||||
NetCommands.setStartTicks(this.timeState.ticks);
|
||||
}, 500);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,13 +121,9 @@ class JoinServerGui extends GuiImage {
|
|||
var failed = true;
|
||||
haxe.Timer.delay(() -> {
|
||||
if (failed) {
|
||||
// if (MarbleGame.canvas.content is MultiplayerLoadingGui) {
|
||||
// var loadGui:MultiplayerLoadingGui = cast MarbleGame.canvas.content;
|
||||
// if (loadGui != null) {
|
||||
// loadGui.setErrorStatus("Failed to connect to server. Please try again.");
|
||||
MarbleGame.canvas.setContent(new JoinServerGui());
|
||||
MarbleGame.canvas.pushDialog(new MessageBoxOkDlg("Failed to connect to server. Please try again."));
|
||||
Net.disconnect();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}, 15000);
|
||||
Net.joinServer(ourServerList[curSelection].name, "", () -> {
|
||||
|
|
|
|||
112
src/gui/MPKickBanDlg.hx
Normal file
112
src/gui/MPKickBanDlg.hx
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
package gui;
|
||||
|
||||
import net.NetCommands;
|
||||
import net.Net;
|
||||
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 MPKickBanDlg extends GuiImage {
|
||||
public function new() {
|
||||
var img = ResourceLoader.getImage("data/ui/mp/kickban/window.png");
|
||||
super(img.resource.toTile());
|
||||
this.horizSizing = Center;
|
||||
this.vertSizing = Center;
|
||||
this.position = new Vector(226, 137);
|
||||
this.extent = new Vector(409, 316);
|
||||
|
||||
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();
|
||||
return [normal, hover, pressed];
|
||||
}
|
||||
|
||||
function loadButtonImagesExt(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 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);
|
||||
|
||||
var closeBtn = new GuiButton(loadButtonImages("data/ui/mp/team/close"));
|
||||
closeBtn.position = new Vector(247, 254);
|
||||
closeBtn.extent = new Vector(94, 45);
|
||||
closeBtn.vertSizing = Bottom;
|
||||
closeBtn.horizSizing = Right;
|
||||
closeBtn.pressedAction = (e) -> {
|
||||
MarbleGame.canvas.popDialog(this);
|
||||
}
|
||||
this.addChild(closeBtn);
|
||||
|
||||
var kickBtn = new GuiButton(loadButtonImagesExt("data/ui/mp/kickban/kick"));
|
||||
kickBtn.position = new Vector(77, 254);
|
||||
kickBtn.extent = new Vector(94, 45);
|
||||
kickBtn.vertSizing = Bottom;
|
||||
kickBtn.horizSizing = Right;
|
||||
kickBtn.disabled = true;
|
||||
this.addChild(kickBtn);
|
||||
|
||||
var kickTitle = new GuiText(markerFelt32);
|
||||
kickTitle.text.textColor = 0xFFFFFF;
|
||||
kickTitle.text.text = "Kick Players";
|
||||
kickTitle.text.dropShadow = {
|
||||
dx: 1,
|
||||
dy: 1,
|
||||
alpha: 0.5,
|
||||
color: 0
|
||||
};
|
||||
kickTitle.justify = Center;
|
||||
kickTitle.position = new Vector(11, 17);
|
||||
kickTitle.extent = new Vector(388, 14);
|
||||
this.addChild(kickTitle);
|
||||
|
||||
var playerNames = [];
|
||||
var playerIds = [];
|
||||
for (c in Net.clients) {
|
||||
playerNames.push(c.getName());
|
||||
playerIds.push(c.id);
|
||||
}
|
||||
|
||||
var kickPlayerId = -1;
|
||||
|
||||
var playerList = new GuiTextListCtrl(markerFelt18, playerNames, 0);
|
||||
playerList.position = new Vector(120, 60);
|
||||
playerList.extent = new Vector(188, 180);
|
||||
playerList.textYOffset = -6;
|
||||
playerList.onSelectedFunc = (sel) -> {
|
||||
kickBtn.disabled = false;
|
||||
kickPlayerId = playerIds[sel];
|
||||
}
|
||||
this.addChild(playerList);
|
||||
|
||||
kickBtn.pressedAction = (e) -> {
|
||||
if (Net.clientIdMap.exists(kickPlayerId)) {
|
||||
var playerToKick = kickPlayerId;
|
||||
playerNames.remove(Net.clientIdMap.get(playerToKick).getName());
|
||||
playerIds.remove(playerToKick);
|
||||
playerList.setTexts(playerNames);
|
||||
kickBtn.disabled = true;
|
||||
NetCommands.getKickedClient(Net.clientIdMap.get(playerToKick));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
package gui;
|
||||
|
||||
import net.Net;
|
||||
import net.NetCommands;
|
||||
import h2d.filter.DropShadow;
|
||||
import hxd.res.BitmapFont;
|
||||
import h3d.prim.Polygon;
|
||||
|
|
@ -54,6 +56,18 @@ class MPMarbleSelectGui extends GuiImage {
|
|||
Settings.optionsSettings.marbleShader = MarbleSelectGui.marbleData[curCategorySelection][curSelection].shader;
|
||||
Settings.save();
|
||||
MarbleGame.canvas.popDialog(this);
|
||||
|
||||
// Transmit changes to the server/clients
|
||||
if (Net.isClient) {
|
||||
NetCommands.setPlayerData(Net.clientId, Settings.highscoreName, Settings.optionsSettings.marbleIndex,
|
||||
Settings.optionsSettings.marbleCategoryIndex, true);
|
||||
}
|
||||
if (Net.isHost) {
|
||||
var b = Net.sendPlayerInfosBytes();
|
||||
for (cc in Net.clients) {
|
||||
cc.sendBytes(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.addChild(selectBtn);
|
||||
|
||||
|
|
|
|||
|
|
@ -163,6 +163,9 @@ class MPPlayMissionGui extends GuiImage {
|
|||
var kickBtn = new GuiButton(loadButtonImages("data/ui/mp/play/kick"));
|
||||
kickBtn.position = new Vector(304, 514);
|
||||
kickBtn.extent = new Vector(44, 44);
|
||||
kickBtn.pressedAction = (e) -> {
|
||||
MarbleGame.canvas.pushDialog(new MPKickBanDlg());
|
||||
}
|
||||
if (Net.isHost)
|
||||
window.addChild(kickBtn);
|
||||
|
||||
|
|
|
|||
|
|
@ -96,6 +96,9 @@ class MPPreGameDlg extends GuiControl {
|
|||
kickBtn.vertSizing = Bottom;
|
||||
kickBtn.position = new Vector(360, 388);
|
||||
kickBtn.extent = new Vector(45, 45);
|
||||
kickBtn.pressedAction = (e) -> {
|
||||
MarbleGame.canvas.pushDialog(new MPKickBanDlg());
|
||||
}
|
||||
if (Net.isHost)
|
||||
dialogImg.addChild(kickBtn);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package net;
|
||||
|
||||
import gui.JoinServerGui;
|
||||
import gui.MessageBoxOkDlg;
|
||||
import src.MarbleGame;
|
||||
import haxe.Json;
|
||||
|
|
@ -294,10 +295,8 @@ class MasterServerClient {
|
|||
@:privateAccess Net.client.setRemoteDescription(sdpObj.sdp, sdpObj.type);
|
||||
}
|
||||
if (conts.type == "connectFailed") {
|
||||
// var loadGui:MultiplayerLoadingGui = cast MarbleGame.canvas.content;
|
||||
// if (loadGui != null) {
|
||||
// loadGui.setErrorStatus(conts.reason);
|
||||
// }
|
||||
MarbleGame.canvas.setContent(new JoinServerGui());
|
||||
MarbleGame.canvas.pushDialog(new MessageBoxOkDlg(conts.reason));
|
||||
}
|
||||
if (conts.type == "turnserver") {
|
||||
Net.turnServer = conts.server; // Turn server!
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package net;
|
||||
|
||||
import gui.MessageBoxOkDlg;
|
||||
import gui.JoinServerGui;
|
||||
import gui.MPPreGameDlg;
|
||||
import net.NetPacket.ScoreboardPacket;
|
||||
import gui.MPPlayMissionGui;
|
||||
|
|
@ -212,14 +214,8 @@ class Net {
|
|||
MarbleGame.instance.quitMission();
|
||||
}
|
||||
if (!weLeftOurselves || forceShow) {
|
||||
// if (!(MarbleGame.canvas.content is MultiplayerLoadingGui)) {
|
||||
// var loadGui = new MultiplayerLoadingGui(msg);
|
||||
// MarbleGame.canvas.setContent(loadGui);
|
||||
// loadGui.setErrorStatus(msg);
|
||||
// } else {
|
||||
// var loadGui = cast(MarbleGame.canvas.content, MultiplayerLoadingGui);
|
||||
// loadGui.setErrorStatus(msg);
|
||||
// }
|
||||
MarbleGame.canvas.setContent(new JoinServerGui());
|
||||
MarbleGame.canvas.pushDialog(new MessageBoxOkDlg(msg));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -232,7 +228,7 @@ class Net {
|
|||
switch (s) {
|
||||
case RTC_CLOSED:
|
||||
Console.log("RTC State change: Connection closed!");
|
||||
closeFunc("Connection closed", true);
|
||||
closeFunc("Connection closed", false);
|
||||
case RTC_CONNECTED:
|
||||
Console.log("RTC State change: Connected!");
|
||||
case RTC_CONNECTING:
|
||||
|
|
@ -312,12 +308,12 @@ class Net {
|
|||
}
|
||||
|
||||
var onDatachannelClose = (dc:RTCDataChannel) -> {
|
||||
closeFunc("Disconnected", true);
|
||||
closeFunc("Disconnected", false);
|
||||
}
|
||||
|
||||
var onDatachannelError = (msg:String) -> {
|
||||
Console.log('Errored out due to ${msg}');
|
||||
closeFunc("Connection error", true);
|
||||
closeFunc("Connection error", false);
|
||||
}
|
||||
|
||||
clientDatachannel.onOpen = (n) -> {
|
||||
|
|
@ -424,11 +420,8 @@ class Net {
|
|||
if (MarbleGame.instance.world != null) {
|
||||
MarbleGame.instance.quitMission();
|
||||
}
|
||||
// if (!(MarbleGame.canvas.content is MultiplayerLoadingGui)) {
|
||||
// var loadGui = new MultiplayerLoadingGui("Timed out");
|
||||
// MarbleGame.canvas.setContent(loadGui);
|
||||
// loadGui.setErrorStatus("Timed out");
|
||||
// }
|
||||
MarbleGame.canvas.setContent(new JoinServerGui());
|
||||
MarbleGame.canvas.pushDialog(new MessageBoxOkDlg("Timed out"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -660,7 +653,7 @@ class Net {
|
|||
clientId = input.readByte(); // 8 bit client id, hopefully we don't exceed this
|
||||
Console.log('Client ID set to ${clientId}');
|
||||
NetCommands.setPlayerData(clientId, Settings.highscoreName, Settings.optionsSettings.marbleIndex,
|
||||
Settings.optionsSettings.marbleCategoryIndex); // Send our player name to the server
|
||||
Settings.optionsSettings.marbleCategoryIndex, false); // Send our player name to the server
|
||||
NetCommands.transmitPlatform(clientId, getPlatform()); // send our platform too
|
||||
|
||||
case Ping:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package net;
|
||||
|
||||
import gui.MessageBoxOkDlg;
|
||||
import gui.JoinServerGui;
|
||||
import gui.MPExitGameDlg;
|
||||
import gui.MPEndGameGui;
|
||||
import gui.MPPreGameDlg;
|
||||
|
|
@ -262,19 +264,32 @@ class NetCommands {
|
|||
if (MarbleGame.instance.world != null) {
|
||||
MarbleGame.instance.quitMission();
|
||||
}
|
||||
// var loadGui = new MultiplayerLoadingGui("Server closed");
|
||||
// MarbleGame.canvas.setContent(loadGui);
|
||||
// loadGui.setErrorStatus("Server closed");
|
||||
MarbleGame.canvas.setContent(new JoinServerGui());
|
||||
MarbleGame.canvas.pushDialog(new MessageBoxOkDlg("Server closed"));
|
||||
}
|
||||
}
|
||||
|
||||
@:rpc(client) public static function setPlayerData(clientId:Int, name:String, marble:Int, marbleCat:Int) {
|
||||
@:rpc(server) public static function getKicked() {
|
||||
if (Net.isClient) {
|
||||
Net.disconnect();
|
||||
MarbleGame.canvas.setContent(new JoinServerGui());
|
||||
MarbleGame.canvas.pushDialog(new MessageBoxOkDlg("Kicked from server"));
|
||||
}
|
||||
}
|
||||
|
||||
@:rpc(client) public static function setPlayerData(clientId:Int, name:String, marble:Int, marbleCat:Int, needRetransmit:Bool) {
|
||||
if (Net.isHost) {
|
||||
Net.clientIdMap[clientId].setName(name);
|
||||
Net.clientIdMap[clientId].setMarbleId(marble, marbleCat);
|
||||
if (MarbleGame.canvas.content is MPPlayMissionGui) {
|
||||
cast(MarbleGame.canvas.content, MPPlayMissionGui).updateLobbyNames();
|
||||
}
|
||||
if (needRetransmit) {
|
||||
var b = Net.sendPlayerInfosBytes();
|
||||
for (cc in Net.clients) {
|
||||
cc.sendBytes(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue