diff --git a/src/Marble.hx b/src/Marble.hx
index 2034130c..d8f2093d 100644
--- a/src/Marble.hx
+++ b/src/Marble.hx
@@ -230,8 +230,8 @@ class Marble extends GameObject {
var minVelocityBounceSoft = 2.5;
var minVelocityBounceHard = 12.0;
var bounceMinGain = 0.2;
- var maxBlastRepulse = 60.0;
- var blastRepulseDist = 10.0;
+ var blastShockwaveStrength = 5.0;
+ var blastRechargeShockwaveStrength = 10.0;
public var _bounceRestitution = 0.5;
@@ -600,12 +600,6 @@ class Marble extends GameObject {
var force = cast(obj, ForceObject).getForce(this.collider.transform.getPosition());
A.load(A.add(force.multiply(1 / mass)));
}
- for (marble in level.marbles) {
- if ((marble != cast this) && !marble._firstTick) {
- var force = marble.getForce(this.collider.transform.getPosition(), timeState.ticks);
- A.load(A.add(force.multiply(1 / mass)));
- }
- }
}
if (contacts.length != 0 && this.mode != Start) {
@@ -2194,8 +2188,10 @@ class Marble extends GameObject {
public function getMass() {
if (this.level == null)
return 1;
- if (this.level.timeState.currentAttemptTime - this.megaMarbleEnableTime < 10) {
- return 5;
+ if (this.level.timeState.currentAttemptTime - this.megaMarbleEnableTime < 10
+ || (Net.isHost && this.megaMarbleUseTick > 0 && (this.level.timeState.ticks - this.megaMarbleUseTick) < 312)
+ || (Net.isClient && this.megaMarbleUseTick > 0 && (this.serverTicks - this.megaMarbleUseTick) < 312)) {
+ return 4;
} else {
return 1;
}
@@ -2217,6 +2213,21 @@ class Marble extends GameObject {
},
new Vector(1, 1, 1).add(new Vector(Math.abs(this.currentUp.x), Math.abs(this.currentUp.y), Math.abs(this.currentUp.z)).multiply(-0.8)));
this.blastTicks = 0;
+ // Now send the impulse to other marbles
+ var strength = blastAmt * (blastAmt > 1 ? blastRechargeShockwaveStrength : blastShockwaveStrength);
+ var ourPos = this.collider.transform.getPosition();
+ for (marble in level.marbles) {
+ if (marble != cast this) {
+ var theirPos = marble.collider.transform.getPosition();
+ var posDiff = ourPos.distance(theirPos);
+ if (posDiff < strength) {
+ var myMod = isMegaMarbleEnabled(timeState) ? 0.7 : 1.0;
+ var theirMod = @:privateAccess marble.isMegaMarbleEnabled(timeState) ? 0.7 : 1.0;
+ var impulse = theirPos.sub(ourPos).normalized().multiply(strength * (theirMod / myMod));
+ marble.applyImpulse(impulse);
+ }
+ }
+ }
} else {
if (this.blastAmount < 0.2 || this.level.game != "ultra")
return;
@@ -2232,33 +2243,6 @@ class Marble extends GameObject {
}
}
- public function getForce(position:Vector, tick:Int) {
- var retForce = new Vector();
- if (tick - blastUseTick >= 12)
- return retForce;
- var delta = position.sub(newPos);
- var deltaLen = delta.length();
-
- var maxDist = Math.max(blastRepulseDist, blastRepulseDist * blastPerc);
- var maxRepulse = maxBlastRepulse * blastPerc;
-
- if (deltaLen > maxDist)
- return retForce;
-
- if (deltaLen >= 0.05) {
- var dist = 0.0;
- if (deltaLen >= 1.0)
- dist = (1.0 / deltaLen - 1.0 / maxDist) * maxRepulse;
- else
- dist = maxRepulse / deltaLen;
-
- retForce.load(retForce.add(delta.multiply(dist)));
- } else {
- retForce.load(retForce.add(this.currentUp.multiply(maxRepulse)));
- }
- return retForce;
- }
-
public function applyImpulse(impulse:Vector, contactImpulse:Bool = false) {
this.appliedImpulses.push({impulse: impulse, contactImpulse: contactImpulse});
}
diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx
index ed37808c..69627df8 100644
--- a/src/MarbleWorld.hx
+++ b/src/MarbleWorld.hx
@@ -352,14 +352,14 @@ class MarbleWorld extends Scheduler {
if (this.isMultiplayer) {
// Add us
- // if (Net.isHost) {
- // this.playGui.addPlayer(0, Settings.highscoreName.substr(0, 15), true);
- // } else {
- // this.playGui.addPlayer(Net.clientId, Settings.highscoreName.substr(0, 15), true);
- // }
- // for (client in Net.clientIdMap) {
- // this.playGui.addPlayer(client.id, client.name.substr(0, 15), false);
- // }
+ if (Net.isHost) {
+ this.playGui.addPlayer(0, Settings.highscoreName.substr(0, 15), true);
+ } else {
+ this.playGui.addPlayer(Net.clientId, Settings.highscoreName.substr(0, 15), true);
+ }
+ for (client in Net.clientIdMap) {
+ this.playGui.addPlayer(client.id, client.name.substr(0, 15), false);
+ }
}
this._ready = true;
@@ -557,8 +557,8 @@ class MarbleWorld extends Scheduler {
this.initMarble(cc, () -> {
var addedMarble = clientMarbles.get(cc);
this.restart(addedMarble); // spawn it
- // this.playGui.addPlayer(cc.id, cc.getName(), false);
- // this.playGui.redrawPlayerList();
+ this.playGui.addPlayer(cc.id, cc.getName(), false);
+ this.playGui.redrawPlayerList();
// Sort all the marbles so that they are updated in a deterministic order
this.marbles.sort((a, b) -> @:privateAccess {
@@ -574,8 +574,8 @@ class MarbleWorld extends Scheduler {
this.initMarble(cc, () -> {
var addedMarble = clientMarbles.get(cc);
this.restart(addedMarble); // spawn it
- // this.playGui.addPlayer(cc.id, cc.getName(), false);
- // this.playGui.redrawPlayerList();
+ this.playGui.addPlayer(cc.id, cc.getName(), false);
+ this.playGui.redrawPlayerList();
// Sort all the marbles so that they are updated in a deterministic order
this.marbles.sort((a, b) -> @:privateAccess {
@@ -713,7 +713,7 @@ class MarbleWorld extends Scheduler {
marble.reset();
marble.setMode(Start);
}
- // this.playGui.resetPlayerScores();
+ this.playGui.resetPlayerScores();
}
var missionInfo:MissionElementScriptObject = cast this.mission.root.elements.filter((element) -> element._type == MissionElementType.ScriptObject
@@ -1496,7 +1496,7 @@ class MarbleWorld extends Scheduler {
this.scene.removeChild(otherMarble);
this.collisionWorld.removeMarbleEntity(otherMarble.collider);
this.collisionWorld.removeMovingEntity(otherMarble.collider);
- // this.playGui.removePlayer(cc.id);
+ this.playGui.removePlayer(cc.id);
this.clientMarbles.remove(cc);
otherMarble.dispose();
this.marbles.remove(otherMarble);
diff --git a/src/Util.hx b/src/Util.hx
index cd40258b..672e6327 100644
--- a/src/Util.hx
+++ b/src/Util.hx
@@ -363,6 +363,13 @@ class Util {
return keyName;
}
+ public static inline function rightPad(str:String, len:Int, cutOff:Int) {
+ str = str.substring(0, len - cutOff);
+ while (str.length < len)
+ str += " ";
+ return str;
+ }
+
public static function m_matF_x_vectorF(matrix:Matrix, v:Vector) {
var m = matrix.clone();
m.transpose();
diff --git a/src/collision/CollisionWorld.hx b/src/collision/CollisionWorld.hx
index f07e89d8..475112b1 100644
--- a/src/collision/CollisionWorld.hx
+++ b/src/collision/CollisionWorld.hx
@@ -151,13 +151,18 @@ class CollisionWorld {
}
public function addEntity(entity:CollisionEntity) {
- this.octree.insert(entity);
- this.entities.push(entity);
+ if (this.octree.insert(entity))
+ this.entities.push(entity);
// this.rtree.insert([entity.boundingBox.xMin, entity.boundingBox.yMin, entity.boundingBox.zMin],
// [entity.boundingBox.xSize, entity.boundingBox.ySize, entity.boundingBox.zSize], entity);
}
+ public function removeEntity(entity:CollisionEntity) {
+ this.entities.remove(entity);
+ this.octree.remove(entity);
+ }
+
public function addMarbleEntity(entity:SphereCollisionEntity) {
this.marbleEntities.push(entity);
}
diff --git a/src/gui/GuiTextListCtrl.hx b/src/gui/GuiTextListCtrl.hx
index 81cd2039..22a8de96 100644
--- a/src/gui/GuiTextListCtrl.hx
+++ b/src/gui/GuiTextListCtrl.hx
@@ -63,7 +63,7 @@ class GuiTextListCtrl extends GuiControl {
tobj.textColor = textColor;
textObjs.push(tobj);
- if (this.scrollable) {
+ if (this.scrollable && this.flow != null) {
if (this.flow.contains(tobj))
this.flow.removeChild(tobj);
diff --git a/src/gui/JoinServerGui.hx b/src/gui/JoinServerGui.hx
index f021101c..407adb0c 100644
--- a/src/gui/JoinServerGui.hx
+++ b/src/gui/JoinServerGui.hx
@@ -71,6 +71,8 @@ class JoinServerGui extends GuiImage {
var serverList = new GuiTextListCtrl(markerFelt18, [], 0xFFFFFF);
serverList.position = new Vector(0, 0);
serverList.extent = new Vector(475, 63);
+ serverList.scrollable = true;
+ serverList.textYOffset = -6;
serverList.onSelectedFunc = (sel) -> {
curSelection = sel;
}
diff --git a/src/gui/MPPlayMissionGui.hx b/src/gui/MPPlayMissionGui.hx
index 9d153282..be992e0a 100644
--- a/src/gui/MPPlayMissionGui.hx
+++ b/src/gui/MPPlayMissionGui.hx
@@ -44,6 +44,9 @@ class MPPlayMissionGui extends GuiImage {
var previewToken:Int = 0;
#end
+ var playerListCtrl:GuiTextListCtrl;
+ var playerListCtrlDs:GuiTextListCtrl;
+
public function new(isHost:Bool = true) {
MissionList.buildMissionList();
function chooseBg() {
@@ -305,6 +308,20 @@ class MPPlayMissionGui extends GuiImage {
playersBox.extent = new Vector(305, 229);
window.addChild(playersBox);
+ playerListCtrlDs = new GuiTextListCtrl(markerFelt18, [], 0x000000);
+ playerListCtrlDs.position = new Vector(-1, 25);
+ playerListCtrlDs.extent = new Vector(305, 203);
+ playerListCtrlDs.scrollable = true;
+ playerListCtrlDs.textYOffset = -6;
+ playersBox.addChild(playerListCtrlDs);
+
+ playerListCtrl = new GuiTextListCtrl(markerFelt18, [], 0xFFFFFF);
+ playerListCtrl.position = new Vector(0, 26);
+ playerListCtrl.extent = new Vector(305, 203);
+ playerListCtrl.scrollable = true;
+ playerListCtrl.textYOffset = -6;
+ playersBox.addChild(playerListCtrl);
+
var playerListTitle = new GuiText(markerFelt24);
playerListTitle.position = new Vector(7, 0);
playerListTitle.extent = new Vector(275, 22);
@@ -505,6 +522,7 @@ class MPPlayMissionGui extends GuiImage {
currentList = MissionList.missionList["multiplayer"]["beginner"];
setCategoryFunc(currentCategoryStatic, null, false);
+ updateLobbyNames();
}
public override function render(scene2d:Scene, ?parent:h2d.Flow) {
@@ -534,19 +552,16 @@ class MPPlayMissionGui extends GuiImage {
}
public function updateLobbyNames() {
- return;
var playerListArr = [];
if (Net.isHost) {
playerListArr.push({
name: Settings.highscoreName,
- state: Net.lobbyHostReady,
platform: Net.getPlatform()
});
}
if (Net.isClient) {
playerListArr.push({
name: Settings.highscoreName,
- state: Net.lobbyClientReady,
platform: Net.getPlatform()
});
}
@@ -554,34 +569,18 @@ class MPPlayMissionGui extends GuiImage {
for (c => v in Net.clientIdMap) {
playerListArr.push({
name: v.name,
- state: v.lobbyReady,
platform: v.platform
});
}
}
+ var playerListCompiled = playerListArr.map(player -> player.name);
+ playerListCtrlDs.setTexts(playerListCompiled);
+ playerListCtrl.setTexts(playerListCompiled);
+
// if (!showingCustoms)
// playerList.setTexts(playerListArr.map(player -> {
// return '
${player.name}';
// }));
-
- var pubCount = 1; // Self
- var privCount = 0;
- for (cid => cc in Net.clientIdMap) {
- if (cc.isPrivate) {
- privCount++;
- } else {
- pubCount++;
- }
- }
-
- if (Net.isHost) {
- // updatePlayerCountFn(pubCount, privCount, Net.serverInfo.maxPlayers - Net.serverInfo.privateSlots, Net.serverInfo.privateSlots);
- }
- }
-
- public function updatePlayerCount(pub:Int, priv:Int, publicTotal:Int, privateTotal:Int) {
- return;
- // updatePlayerCountFn(pub, priv, publicTotal, privateTotal);
}
}
diff --git a/src/gui/PlayGui.hx b/src/gui/PlayGui.hx
index 10ffff7d..dc3ef7d8 100644
--- a/src/gui/PlayGui.hx
+++ b/src/gui/PlayGui.hx
@@ -1,5 +1,6 @@
package gui;
+import net.NetPacket.ScoreboardPacket;
import net.Net;
import src.ProfilerUI;
import hxd.App;
@@ -31,10 +32,22 @@ import hxd.res.Sound;
import h3d.mat.Texture;
import src.Settings;
import src.Util;
+import src.AudioManager;
-typedef MiddleMessage = {
- ctrl:GuiText,
- age:Float,
+@:publicFields
+@:structInit
+class MiddleMessage {
+ var ctrl:GuiText;
+ var age:Float;
+}
+
+@:publicFields
+@:structInit
+class PlayerInfo {
+ var id:Int;
+ var name:String;
+ var us:Bool;
+ var score:Int;
}
class PlayGui {
@@ -70,6 +83,13 @@ class PlayGui {
var blastFill:GuiImage;
var blastFrame:GuiImage;
+ var playerListContainer:GuiControl;
+ var playerListCtrl:GuiMLTextListCtrl;
+ var playerListScoresCtrl:GuiMLTextListCtrl;
+ var playerListShadowCtrl:GuiMLTextListCtrl;
+ var playerListScoresShadowCtrl:GuiMLTextListCtrl;
+ var playerList:Array = [];
+
var imageResources:Array> = [];
var textureResources:Array> = [];
var soundResources:Array> = [];
@@ -87,6 +107,20 @@ class PlayGui {
public function dispose() {
if (_init) {
playGuiCtrl.dispose();
+
+ if (playerListContainer != null) {
+ playerListContainer.dispose();
+ playerListContainer = null;
+ playerListCtrl.dispose();
+ playerListCtrl = null;
+ playerListShadowCtrl.dispose();
+ playerListShadowCtrl = null;
+ playerListScoresCtrl.dispose();
+ playerListScoresCtrl = null;
+ playerListScoresShadowCtrl.dispose();
+ playerListScoresShadowCtrl = null;
+ }
+
gemImageScene.dispose();
gemImageSceneTarget.dispose();
gemImageSceneTargetBitmap.remove();
@@ -161,6 +195,11 @@ class PlayGui {
if (Settings.optionsSettings.frameRateVis)
initFPSMeter();
+ if (MarbleGame.instance.world.isMultiplayer) {
+ initPlayerList();
+ // initChatHud();
+ }
+
if (Util.isTouchDevice()) {
MarbleGame.instance.touchInput.showControls(this.playGuiCtrl, game == 'ultra');
}
@@ -494,6 +533,139 @@ class PlayGui {
this.blastBar.render(scene2d);
}
+ function initPlayerList() {
+ var domcasual32fontdata = ResourceLoader.getFileEntry("data/font/DomCasualD.fnt");
+ var domcasual32b = new BitmapFont(domcasual32fontdata.entry);
+ @:privateAccess domcasual32b.loader = ResourceLoader.loader;
+ var bfont = domcasual32b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel);
+
+ playerListContainer = new GuiControl();
+ playerListContainer.horizSizing = Right;
+ playerListContainer.vertSizing = Height;
+ playerListContainer.position = new Vector(20, 100);
+ playerListContainer.extent = new Vector(300, 380);
+ this.playGuiCtrl.addChild(playerListContainer);
+
+ var imgLoader = (s:String) -> {
+ return null;
+ }
+
+ playerListShadowCtrl = new GuiMLTextListCtrl(bfont, [], imgLoader);
+
+ playerListShadowCtrl.position = new Vector(34, 4);
+ playerListShadowCtrl.extent = new Vector(210, 271);
+ playerListShadowCtrl.scrollable = true;
+ playerListShadowCtrl.onSelectedFunc = (sel) -> {}
+ playerListContainer.addChild(playerListShadowCtrl);
+
+ playerListScoresShadowCtrl = new GuiMLTextListCtrl(bfont, [], imgLoader);
+
+ playerListScoresShadowCtrl.position = new Vector(234, 4);
+ playerListScoresShadowCtrl.extent = new Vector(210, 271);
+ playerListScoresShadowCtrl.scrollable = true;
+ playerListScoresShadowCtrl.onSelectedFunc = (sel) -> {}
+ playerListContainer.addChild(playerListScoresShadowCtrl);
+
+ playerListCtrl = new GuiMLTextListCtrl(bfont, [], imgLoader);
+
+ playerListCtrl.position = new Vector(33, 3);
+ playerListCtrl.extent = new Vector(210, 271);
+ playerListCtrl.scrollable = true;
+ playerListCtrl.onSelectedFunc = (sel) -> {}
+ playerListContainer.addChild(playerListCtrl);
+
+ playerListScoresCtrl = new GuiMLTextListCtrl(bfont, [], imgLoader);
+
+ playerListScoresCtrl.position = new Vector(233, 3);
+ playerListScoresCtrl.extent = new Vector(210, 271);
+ playerListScoresCtrl.scrollable = true;
+ playerListScoresCtrl.onSelectedFunc = (sel) -> {}
+ playerListContainer.addChild(playerListScoresCtrl);
+ }
+
+ public function redrawPlayerList() {
+ var pl = [];
+ var plScores = [];
+ var plShadow = [];
+ var plShadowScores = [];
+ var col0 = "#CFB52B";
+ var col1 = "#CDCDCD";
+ var col2 = "#D19275";
+ var col3 = "#FFEE99";
+ playerList.sort((a, b) -> a.score > b.score ? -1 : (a.score < b.score ? 1 : 0));
+ for (i in 0...playerList.length) {
+ var item = playerList[i];
+ var color = switch (i) {
+ case 0:
+ col0;
+ case 1:
+ col1;
+ case 2:
+ col2;
+ default:
+ col3;
+ };
+ pl.push('${i + 1}. ${Util.rightPad(item.name, 25, 3)}');
+ plScores.push('${item.score}');
+ plShadow.push('${i + 1}. ${Util.rightPad(item.name, 25, 3)}');
+ plShadowScores.push('${item.score}');
+ }
+ playerListCtrl.setTexts(pl);
+ playerListScoresCtrl.setTexts(plScores);
+ playerListShadowCtrl.setTexts(plShadow);
+ playerListScoresShadowCtrl.setTexts(plShadowScores);
+ }
+
+ public function addPlayer(id:Int, name:String, us:Bool) {
+ if (playerListCtrl != null) {
+ playerList.push({
+ id: id,
+ name: name,
+ us: us,
+ score: 0
+ });
+ redrawPlayerList();
+ }
+ }
+
+ public function removePlayer(id:Int) {
+ if (playerListCtrl != null) {
+ var f = playerList.filter(x -> x.id == id);
+ if (f.length != 0)
+ playerList.remove(f[0]);
+ redrawPlayerList();
+ }
+ }
+
+ public function incrementPlayerScore(id:Int, score:Int) {
+ var f = playerList.filter(x -> x.id == id);
+ if (f.length != 0)
+ f[0].score += score;
+
+ if (id == Net.clientId) {
+ if (Net.isClient)
+ AudioManager.playSound(ResourceLoader.getResource('data/sound/gotgem.wav', ResourceLoader.getAudio, this.soundResources));
+ } else if (Net.isClient)
+ AudioManager.playSound(ResourceLoader.getResource('data/sound/opponentdiamond.wav', ResourceLoader.getAudio, this.soundResources));
+
+ redrawPlayerList();
+ }
+
+ public function updatePlayerScores(scoreboardPacket:ScoreboardPacket) {
+ for (player in playerList) {
+ player.score = scoreboardPacket.scoreBoard.exists(player.id) ? scoreboardPacket.scoreBoard.get(player.id) : 0;
+ }
+ redrawPlayerList();
+ }
+
+ public function resetPlayerScores() {
+ for (player in playerList) {
+ player.score = 0;
+ }
+
+ redrawPlayerList();
+ }
+
public function setHelpTextOpacity(value:Float) {
@:privateAccess helpTextForeground.text._textColorVec.a = value;
@:privateAccess helpTextBackground.text._textColorVec.a = value;
@@ -569,6 +741,8 @@ class PlayGui {
}
public function formatGemCounter(collected:Int, total:Int) {
+ if (MarbleGame.instance.world.isMultiplayer)
+ return;
if (total == 0) {
for (number in gemCountNumbers) {
number.anim.visible = false;
@@ -599,6 +773,25 @@ class PlayGui {
gemCountNumbers[5].anim.currentFrame = totalOnes;
}
+ public function formatGemHuntCounter(collected:Int) {
+ gemCountNumbers[0].anim.visible = true;
+ gemCountNumbers[1].anim.visible = true;
+ gemCountNumbers[2].anim.visible = true;
+ gemCountNumbers[3].anim.visible = false;
+ gemCountNumbers[4].anim.visible = false;
+ gemCountNumbers[5].anim.visible = false;
+
+ var collectedHundredths = Math.floor(collected / 100);
+ var collectedTenths = Math.floor(collected / 10) % 10;
+ var collectedOnes = collected % 10;
+
+ gemCountNumbers[0].anim.currentFrame = collectedHundredths;
+ gemCountNumbers[1].anim.currentFrame = collectedTenths;
+ gemCountNumbers[2].anim.currentFrame = collectedOnes;
+ gemCountSlash.bmp.visible = false;
+ gemImageSceneTargetBitmap.visible = true;
+ }
+
// 0: default
// 1: green
// 2: red
diff --git a/src/modes/HuntMode.hx b/src/modes/HuntMode.hx
index c448e22b..f99b0bc4 100644
--- a/src/modes/HuntMode.hx
+++ b/src/modes/HuntMode.hx
@@ -157,6 +157,7 @@ class HuntMode extends NullMode {
this.gemSpawnPoints.push(spawn);
this.gemOctree.insert(spawn);
gem.setHide(true);
+ this.level.collisionWorld.removeEntity(gem.boundingCollider); // remove from octree to make it easy
if (level.isMultiplayer) {
@:privateAccess level.gemPredictions.alloc();
}
@@ -254,6 +255,7 @@ class HuntMode extends NullMode {
var gem = gemSpawnPoints[spawn];
gem.gem.setHide(false);
gem.gem.pickedUp = false;
+ this.level.collisionWorld.addEntity(gem.gem.boundingCollider);
activeGems.push(gem.gem);
if (gem.gemBeam == null) {
gem.gemBeam = new GemBeam(StringTools.replace(gem.gem.gemColor, '.gem', ''));
@@ -327,6 +329,7 @@ class HuntMode extends NullMode {
override function onRestart() {
setupGems();
points = 0;
+ @:privateAccess level.playGui.formatGemHuntCounter(points);
}
override function onClientRestart() {
@@ -350,7 +353,7 @@ class HuntMode extends NullMode {
}
var incr = 0;
- switch (gem.gemColor) {
+ switch (gem.gemColor.toLowerCase()) {
case "red.gem":
incr = 1;
case "yellow.gem":
@@ -361,7 +364,7 @@ class HuntMode extends NullMode {
if (@:privateAccess !marble.isNetUpdate) {
if (marble == level.marble) {
- switch (gem.gemColor) {
+ switch (gem.gemColor.toLowerCase()) {
case "red.gem":
points += 1;
@:privateAccess level.playGui.addMiddleMessage('+1', 0xFF6666);
@@ -372,7 +375,7 @@ class HuntMode extends NullMode {
points += 5;
@:privateAccess level.playGui.addMiddleMessage('+5', 0x6666FF);
}
- // @:privateAccess level.playGui.formatGemHuntCounter(points);
+ @:privateAccess level.playGui.formatGemHuntCounter(points);
}
}
@@ -389,7 +392,7 @@ class HuntMode extends NullMode {
// Settings.playStatistics.totalMPScore += incr;
- // @:privateAccess level.playGui.incrementPlayerScore(packet.clientId, packet.scoreIncr);
+ @:privateAccess level.playGui.incrementPlayerScore(packet.clientId, packet.scoreIncr);
}
if (this.level.isMultiplayer && Net.isClient) {
gem.pickUpClient = @:privateAccess marble.connection == null ? Net.clientId : @:privateAccess marble.connection.id;
diff --git a/src/net/Net.hx b/src/net/Net.hx
index 7093448e..3ed402a0 100644
--- a/src/net/Net.hx
+++ b/src/net/Net.hx
@@ -712,7 +712,7 @@ class Net {
var gemPickupPacket = new GemPickupPacket();
gemPickupPacket.deserialize(input);
if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
- // @:privateAccess MarbleGame.instance.world.playGui.incrementPlayerScore(gemPickupPacket.clientId, gemPickupPacket.scoreIncr);
+ @:privateAccess MarbleGame.instance.world.playGui.incrementPlayerScore(gemPickupPacket.clientId, gemPickupPacket.scoreIncr);
@:privateAccess MarbleGame.instance.world.gemPredictions.acknowledgeGemPickup(gemPickupPacket);
}
@@ -744,9 +744,6 @@ class Net {
Net.lobbyClientReady = cready;
}
}
- if (newP) {
- // AudioManager.playSound(ResourceLoader.getAudio("sounds/spawn_alternate.wav").resource);
- }
if (MarbleGame.canvas.content is MPPlayMissionGui) {
cast(MarbleGame.canvas.content, MPPlayMissionGui).updateLobbyNames();
}
@@ -754,9 +751,9 @@ class Net {
case ScoreBoardInfo:
var scoreboardPacket = new ScoreboardPacket();
scoreboardPacket.deserialize(input);
- // if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
- // @:privateAccess MarbleGame.instance.world.playGui.updatePlayerScores(scoreboardPacket);
- // }
+ if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
+ @:privateAccess MarbleGame.instance.world.playGui.updatePlayerScores(scoreboardPacket);
+ }
case _:
Console.log("unknown command: " + packetType);
diff --git a/src/octree/Octree.hx b/src/octree/Octree.hx
index 7ad6152a..e1435432 100644
--- a/src/octree/Octree.hx
+++ b/src/octree/Octree.hx
@@ -24,11 +24,11 @@ class Octree {
public function insert(object:IOctreeObject) {
var node = this.objectToNode.get(object);
if (node != null)
- return; // Don't insert if already contained in the tree
+ return false; // Don't insert if already contained in the tree
while (!this.root.largerThan(object) || !this.root.containsCenter(object)) {
// The root node does not fit the object; we need to grow the tree.
if (this.root.depth == -32) {
- return;
+ return true;
}
this.grow(object);
}
@@ -36,6 +36,7 @@ class Octree {
this.root.insert(object);
if (emptyBefore)
this.shrink(); // See if we can fit the octree better now that we actually have an element in it
+ return true;
}
public function remove(object:IOctreeObject) {