get gravity and server stop mission working

This commit is contained in:
RandomityGuy 2024-04-07 02:21:46 +05:30
parent ecaa938f95
commit 10093c1ed3
5 changed files with 59 additions and 15 deletions

View file

@ -1757,8 +1757,8 @@ class Marble extends GameObject {
this.blastUseTick = p.blastTick; this.blastUseTick = p.blastTick;
this.helicopterUseTick = p.heliTick; this.helicopterUseTick = p.heliTick;
this.megaMarbleUseTick = p.megaTick; this.megaMarbleUseTick = p.megaTick;
this.currentUp = p.gravityDirection; // this.currentUp = p.gravityDirection;
this.level.setUp(cast this, this.currentUp, this.level.timeState, true); this.level.setUp(cast this, p.gravityDirection, this.level.timeState);
this.outOfBounds = p.oob; this.outOfBounds = p.oob;
this.camera.oob = p.oob; this.camera.oob = p.oob;
if (p.powerUpId == 0x1FF) { if (p.powerUpId == 0x1FF) {

View file

@ -1,5 +1,7 @@
package src; package src;
import gui.MultiplayerLevelSelectGui;
import net.NetCommands;
import net.Net; import net.Net;
import gui.LevelSelectGui; import gui.LevelSelectGui;
import gui.MainMenuGui; import gui.MainMenuGui;
@ -235,6 +237,9 @@ class MarbleGame {
quitMission(); quitMission();
})); }));
} else { } else {
if (Net.isMP && Net.isClient) {
Net.disconnect();
}
quitMission(); quitMission();
} }
}, (sender) -> { }, (sender) -> {
@ -284,7 +289,9 @@ class MarbleGame {
public function quitMission() { public function quitMission() {
Console.log("Quitting mission"); Console.log("Quitting mission");
if (Net.isMP) { if (Net.isMP) {
Net.disconnect(); if (Net.isHost) {
NetCommands.endGame();
}
} }
var watching = world.isWatching; var watching = world.isWatching;
var missionType = world.mission.type; var missionType = world.mission.type;
@ -310,12 +317,17 @@ class MarbleGame {
canvas.setContent(new MainMenuGui()); canvas.setContent(new MainMenuGui());
#end #end
} else { } else {
var pmg = new LevelSelectGui(LevelSelectGui.currentDifficultyStatic); if (Net.isMP) {
if (_exitingToMenu) { var lobby = new MultiplayerLevelSelectGui(Net.isHost);
_exitingToMenu = false; canvas.setContent(lobby);
canvas.setContent(new MainMenuGui());
} else { } else {
canvas.setContent(pmg); var pmg = new LevelSelectGui(LevelSelectGui.currentDifficultyStatic);
if (_exitingToMenu) {
_exitingToMenu = false;
canvas.setContent(new MainMenuGui());
} else {
canvas.setContent(pmg);
}
} }
} }

View file

@ -1949,10 +1949,20 @@ class MarbleWorld extends Scheduler {
MarbleGame.instance.touchInput.hideControls(@:privateAccess this.playGui.playGuiCtrl); MarbleGame.instance.touchInput.hideControls(@:privateAccess this.playGui.playGuiCtrl);
} }
var endGameCode = () -> { var endGameCode = () -> {
this.dispose(); if (isMultiplayer) {
LevelSelectGui.currentSelectionStatic = mission.index + 1; if (Net.isHost) {
var pmg = new LevelSelectGui(["beginner", "intermediate", "advanced", "multiplayer"][mission.difficultyIndex]); NetCommands.endGame();
MarbleGame.canvas.setContent(pmg); }
if (Net.isClient) {
Net.disconnect();
MarbleGame.instance.quitMission();
}
} else {
this.dispose();
LevelSelectGui.currentSelectionStatic = mission.index + 1;
var pmg = new LevelSelectGui(["beginner", "intermediate", "advanced", "multiplayer"][mission.difficultyIndex]);
MarbleGame.canvas.setContent(pmg);
}
#if js #if js
pointercontainer.hidden = false; pointercontainer.hidden = false;
#end #end
@ -2048,6 +2058,10 @@ class MarbleWorld extends Scheduler {
/** Get the current interpolated orientation quaternion. */ /** Get the current interpolated orientation quaternion. */
public function getOrientationQuat(time:Float) { public function getOrientationQuat(time:Float) {
if (time < this.orientationChangeTime)
return this.oldOrientationQuat;
if (time > this.orientationChangeTime + 1.25)
return this.newOrientationQuat;
var completion = Util.clamp((time - this.orientationChangeTime) / 0.8, 0, 1); var completion = Util.clamp((time - this.orientationChangeTime) / 0.8, 0, 1);
var newDt = completion / 0.15; var newDt = completion / 0.15;
var smooth = 1.0 / (newDt * (newDt * 0.235 * newDt) + newDt + 1.0 + 0.48 * newDt * newDt); var smooth = 1.0 / (newDt * (newDt * 0.235 * newDt) + newDt + 1.0 + 0.48 * newDt * newDt);
@ -2059,12 +2073,12 @@ class MarbleWorld extends Scheduler {
} }
public function setUp(marble:Marble, vec:Vector, timeState:TimeState, instant:Bool = false) { public function setUp(marble:Marble, vec:Vector, timeState:TimeState, instant:Bool = false) {
if (vec == marble.currentUp) if (marble.currentUp == vec)
return; return;
marble.currentUp = vec;
if (isMultiplayer && Net.isHost) { if (isMultiplayer && Net.isHost) {
@:privateAccess marble.netFlags |= MarbleNetFlags.GravityChange; @:privateAccess marble.netFlags |= MarbleNetFlags.GravityChange;
} }
marble.currentUp = vec;
if (marble == this.marble) { if (marble == this.marble) {
var currentQuat = this.getOrientationQuat(timeState.currentAttemptTime); var currentQuat = this.getOrientationQuat(timeState.currentAttemptTime);
var oldUp = new Vector(0, 0, 1); var oldUp = new Vector(0, 0, 1);

View file

@ -120,4 +120,19 @@ class NetCommands {
} }
} }
} }
@:rpc(server) public static function endGame() {
if (Net.isClient) {
if (MarbleGame.instance.world != null) {
MarbleGame.instance.quitMission();
}
}
if (Net.isHost) {
for (c => v in Net.clientIdMap) {
v.state = LOBBY;
v.lobbyReady = false;
}
Net.lobbyHostReady = false;
}
}
} }

View file

@ -1,5 +1,6 @@
package shapes; package shapes;
import net.NetPacket.MarbleNetFlags;
import src.Marble; import src.Marble;
import mis.MisParser; import mis.MisParser;
import dts.DtsFile; import dts.DtsFile;
@ -40,8 +41,10 @@ class AntiGravity extends PowerUp {
direction.transform(this.getRotationQuat().toMatrix()); direction.transform(this.getRotationQuat().toMatrix());
if (marble == level.marble) if (marble == level.marble)
this.level.setUp(marble, direction, timeState); this.level.setUp(marble, direction, timeState);
else else {
@:privateAccess marble.netFlags |= MarbleNetFlags.GravityChange;
marble.currentUp.load(direction); marble.currentUp.load(direction);
}
} }
} }