mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
somewhat more mid-game join
This commit is contained in:
parent
27b1ff183d
commit
b3fab7bc2a
4 changed files with 56 additions and 2 deletions
|
|
@ -1728,7 +1728,7 @@ class Marble extends GameObject {
|
|||
|
||||
// MP Only Functions
|
||||
|
||||
public function clearNetFlags() {
|
||||
public inline function clearNetFlags() {
|
||||
this.netFlags = 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package src;
|
||||
|
||||
import net.NetPacket.PowerupPickupPacket;
|
||||
import net.Move;
|
||||
import net.NetPacket.GemSpawnPacket;
|
||||
import net.BitStream.OutputBitStream;
|
||||
import net.MasterServerClient;
|
||||
|
|
@ -1137,7 +1139,43 @@ class MarbleWorld extends Scheduler {
|
|||
packet.serialize(bs);
|
||||
packets.push(bs.getBytes());
|
||||
|
||||
// Marble states
|
||||
for (marb in this.marbles) {
|
||||
var oldFlags = @:privateAccess marb.netFlags;
|
||||
@:privateAccess marb.netFlags = MarbleNetFlags.DoBlast | MarbleNetFlags.DoMega | MarbleNetFlags.DoHelicopter | MarbleNetFlags.PickupPowerup | MarbleNetFlags.GravityChange;
|
||||
|
||||
var innerMove = @:privateAccess marb.lastMove;
|
||||
if (innerMove == null) {
|
||||
innerMove = new Move();
|
||||
innerMove.d = new Vector(0, 0);
|
||||
}
|
||||
var motionDir = @:privateAccess marb.moveMotionDir;
|
||||
if (motionDir == null) {
|
||||
motionDir = marb.getMarbleAxis()[1];
|
||||
}
|
||||
|
||||
var move = new NetMove(innerMove, motionDir, timeState, timeState.ticks, 65535);
|
||||
|
||||
packets.push(@:privateAccess marb.packUpdate(move, timeState));
|
||||
|
||||
@:privateAccess marb.netFlags = oldFlags;
|
||||
}
|
||||
|
||||
// Powerup states
|
||||
for (powerup in this.powerUps) {
|
||||
if (powerup.currentOpacity != 1.0) { // it must be picked up or something
|
||||
if (@:privateAccess powerup.pickupClient != -1) {
|
||||
var b = new OutputBitStream();
|
||||
b.writeByte(NetPacketType.PowerupPickup);
|
||||
var pickupPacket = new PowerupPickupPacket();
|
||||
pickupPacket.clientId = @:privateAccess powerup.pickupClient;
|
||||
pickupPacket.serverTicks = @:privateAccess powerup.pickupTicks;
|
||||
pickupPacket.powerupItemId = powerup.netIndex;
|
||||
pickupPacket.serialize(b);
|
||||
packets.push(b.getBytes());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return packets;
|
||||
}
|
||||
|
|
@ -1570,18 +1608,23 @@ class MarbleWorld extends Scheduler {
|
|||
packets.push(marble.packUpdate(myMove, fixedDt));
|
||||
packets.push(othermarble.packUpdate(mv, fixedDt));
|
||||
}
|
||||
var allRecv = true;
|
||||
for (client => marble in clientMarbles) { // Oh no!
|
||||
// var pktClone = packets.copy();
|
||||
// pktClone.sort((a, b) -> {
|
||||
// return (a.c == client.id) ? 1 : (b.c == client.id) ? -1 : 0;
|
||||
// });
|
||||
if (client.state != GAME)
|
||||
if (client.state != GAME) {
|
||||
allRecv = false;
|
||||
continue; // Only send if in game
|
||||
}
|
||||
marble.clearNetFlags();
|
||||
for (packet in packets) {
|
||||
client.sendBytes(packet);
|
||||
}
|
||||
}
|
||||
if (allRecv)
|
||||
this.marble.clearNetFlags();
|
||||
}
|
||||
timeState.ticks++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -223,6 +223,9 @@ class HuntMode extends NullMode {
|
|||
|
||||
override function getRespawnTransform() {
|
||||
var lastContactPos = this.level.marble.lastContactPosition;
|
||||
if (lastContactPos == null) {
|
||||
return getSpawnTransform();
|
||||
}
|
||||
// Pick closest spawn point
|
||||
var closestSpawn:MissionElementSpawnSphere = null;
|
||||
var closestDistance = 1e10;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,10 @@ abstract class PowerUp extends DtsObject {
|
|||
public var pickupSound:Sound;
|
||||
public var netIndex:Int;
|
||||
|
||||
// Net
|
||||
var pickupClient:Int = -1;
|
||||
var pickupTicks:Int = -1;
|
||||
|
||||
var customPickupMessage:String = null;
|
||||
|
||||
public function new(element:MissionElementItem) {
|
||||
|
|
@ -48,6 +52,8 @@ abstract class PowerUp extends DtsObject {
|
|||
pickupPacket.powerupItemId = this.netIndex;
|
||||
pickupPacket.serialize(b);
|
||||
Net.sendPacketToIngame(b);
|
||||
pickupClient = pickupPacket.clientId;
|
||||
pickupTicks = pickupPacket.serverTicks;
|
||||
}
|
||||
|
||||
this.lastPickUpTime = timeState.currentAttemptTime;
|
||||
|
|
@ -86,5 +92,7 @@ abstract class PowerUp extends DtsObject {
|
|||
|
||||
public override function reset() {
|
||||
this.lastPickUpTime = Math.NEGATIVE_INFINITY;
|
||||
this.pickupClient = -1;
|
||||
this.pickupTicks = -1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue