From 200c211623426f91c6cea7f2af8e1d05ec455510 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Sun, 19 May 2024 13:34:16 +0530 Subject: [PATCH] add playernames to radar --- src/MarbleWorld.hx | 2 + src/PreviewWorld.hx | 4 +- src/Radar.hx | 67 +++++++++++++++++++++++++++++++ src/collision/CollisionWorld.hx | 2 + src/net/GemPredictionStore.hx | 8 ++-- src/net/MoveManager.hx | 6 +-- src/net/PowerupPredictionStore.hx | 6 +-- 7 files changed, 83 insertions(+), 12 deletions(-) diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 5650e012..015c630a 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -1410,9 +1410,11 @@ class MarbleWorld extends Scheduler { this.predictions.removeMarbleFromPrediction(otherMarble); this.scene.removeChild(otherMarble); this.collisionWorld.removeMarbleEntity(otherMarble.collider); + this.collisionWorld.removeMovingEntity(otherMarble.collider); this.playGui.removePlayer(cc.id); this.clientMarbles.remove(cc); otherMarble.dispose(); + this.marbles.remove(otherMarble); } } diff --git a/src/PreviewWorld.hx b/src/PreviewWorld.hx index 0d1ae273..605a046e 100644 --- a/src/PreviewWorld.hx +++ b/src/PreviewWorld.hx @@ -592,7 +592,7 @@ class PreviewWorld extends Scheduler { marb.controllable = false; marb.init(null, null, () -> { marb.collisionWorld = this.collisionWorld; - this.collisionWorld.addMovingEntity(marb.collider); + // this.collisionWorld.addMovingEntity(marb.collider); this.scene.addChild(marb); this.marbles.push(marb); onFinish(marb); @@ -602,7 +602,7 @@ class PreviewWorld extends Scheduler { public function removeMarble(marb:Marble) { if (this.marbles.remove(marb)) { this.scene.removeChild(marb); - this.collisionWorld.removeMovingEntity(marb.collider); + // this.collisionWorld.removeMovingEntity(marb.collider); marb.dispose(); } } diff --git a/src/Radar.hx b/src/Radar.hx index ee7cdbdb..95b7f7e6 100644 --- a/src/Radar.hx +++ b/src/Radar.hx @@ -1,5 +1,6 @@ package src; +import hxd.res.BitmapFont; import h3d.Matrix; import src.DtsObject; import h3d.Vector; @@ -8,6 +9,9 @@ import src.GameObject; import h2d.Scene; import src.MarbleWorld; import src.Util; +import src.Marble; +import src.Settings; +import src.ResourceLoader; class Radar { var level:MarbleWorld; @@ -15,6 +19,8 @@ class Radar { var g:Graphics; + var marbleNameTexts:Array; + public var ellipseScreenFraction = new Vector(0.79, 0.9); public var fullArrowLength = 60.0; public var fullArrowWidth = 40.0; @@ -29,6 +35,7 @@ class Radar { public function new(level:MarbleWorld, scene2d:Scene) { this.level = level; this.scene2d = scene2d; + this.marbleNameTexts = []; } public function init() { @@ -54,6 +61,32 @@ class Radar { if (@:privateAccess level.endPad != null && gemCount == 0) { renderArrow(@:privateAccess level.endPad.getAbsPos().getPosition(), 0xE6E6E6); } + var fadeDistance = level.scene.camera.zFar * 0.1; + for (marbleName in marbleNameTexts) { + if (marbleName != null) + marbleName.alpha = 0; + } + for (marble in level.marbles) { + if (marble != level.marble) { + var shapePos = marble.getAbsPos().getPosition(); + var shapeDir = shapePos.sub(level.scene.camera.pos); + var shapeDist = shapeDir.lengthSq(); + if (shapeDist == 0 || shapeDist > level.scene.camera.zFar * level.scene.camera.zFar) { + dontRenderName(marble); + continue; + } + var validProjection = frustumHasPoint(level.scene.camera.frustum, shapePos); + if (!validProjection) { + dontRenderName(marble); + continue; + } + shapePos.z += 0.5; // Vertical offset + + var projectedPos = level.scene.camera.project(shapePos.x, shapePos.y, shapePos.z, scene2d.width, scene2d.height); + var opacity = (shapeDist < fadeDistance) ? 1.0 : (1.0 - (shapeDist - fadeDistance) / (level.scene.camera.zFar - fadeDistance)); + renderName(projectedPos, marble, opacity); + } + } _dirty = false; } @@ -70,6 +103,12 @@ class Radar { g.clear(); scene2d.removeChild(g); g = null; + for (txt in marbleNameTexts) { + if (txt != null) { + scene2d.removeChild(txt); + } + } + marbleNameTexts = null; } inline function planeDistance(plane:h3d.col.Plane, p:Vector) { @@ -388,4 +427,32 @@ class Radar { } } } + + function renderName(pos:Vector, marble:Marble, opacity:Float) { + var marbleId = @:privateAccess marble.connection.getMarbleId(); + while (marbleNameTexts.length <= marbleId) + marbleNameTexts.push(null); + if (marbleNameTexts[marbleId] == null) { + var arialb14fontdata = ResourceLoader.getFileEntry("data/font/Arial Bold.fnt"); + var arialb14b = new BitmapFont(arialb14fontdata.entry); + @:privateAccess arialb14b.loader = ResourceLoader.loader; + var arialBold14 = arialb14b.toSdfFont(cast 16 * Settings.uiScale, MultiChannel); + + marbleNameTexts[marbleId] = new h2d.Text(arialBold14, scene2d); + marbleNameTexts[marbleId].textColor = 0xFFFF00; + } + var textObj = marbleNameTexts[marbleId]; + textObj.text = @:privateAccess marble.connection.getName(); + textObj.setPosition(pos.x - textObj.textWidth / 2, pos.y - textObj.textHeight); + textObj.alpha = opacity; + } + + function dontRenderName(marble:Marble) { + var marbleId = @:privateAccess marble.connection.getMarbleId(); + while (marbleNameTexts.length <= marbleId) + marbleNameTexts.push(null); + if (marbleNameTexts[marbleId] != null) { + marbleNameTexts[marbleId].alpha = 0; + } + } } diff --git a/src/collision/CollisionWorld.hx b/src/collision/CollisionWorld.hx index e0bf4084..f07e89d8 100644 --- a/src/collision/CollisionWorld.hx +++ b/src/collision/CollisionWorld.hx @@ -174,6 +174,8 @@ class CollisionWorld { public function removeMovingEntity(entity:CollisionEntity) { this.dynamicEntities.remove(entity); + this.dynamicOctree.remove(entity); + this.dynamicEntitySet.remove(entity); } public function updateTransform(entity:CollisionEntity) { diff --git a/src/net/GemPredictionStore.hx b/src/net/GemPredictionStore.hx index e571f41b..476796ba 100644 --- a/src/net/GemPredictionStore.hx +++ b/src/net/GemPredictionStore.hx @@ -6,11 +6,11 @@ import net.NetPacket.GemPickupPacket; class GemPredictionStore { var predictions:Array; - public function new() { + public inline function new() { predictions = []; } - public function alloc() { + public inline function alloc() { predictions.push(true); } @@ -18,11 +18,11 @@ class GemPredictionStore { return predictions[netIndex]; } - public function acknowledgeGemPickup(packet:GemPickupPacket) { + public inline function acknowledgeGemPickup(packet:GemPickupPacket) { predictions[packet.gemId] = true; } - public function acknowledgeGemSpawn(packet:GemSpawnPacket) { + public inline function acknowledgeGemSpawn(packet:GemSpawnPacket) { for (gemId in packet.gemIds) predictions[gemId] = false; } diff --git a/src/net/MoveManager.hx b/src/net/MoveManager.hx index 8208b0f5..4a152345 100644 --- a/src/net/MoveManager.hx +++ b/src/net/MoveManager.hx @@ -47,12 +47,12 @@ class MoveManager { var maxMoves = 45; var maxSendMoveListSize = 30; - var serverTargetMoveListSize = 4; + var serverTargetMoveListSize = 3; var serverMaxMoveListSize = 8; - var serverAvgMoveListSize = 4.0; + var serverAvgMoveListSize = 3.0; var serverSmoothMoveAvg = 0.15; var serverMoveListSizeSlack = 1.5; - var serverDefaultMinTargetMoveListSize = 4; + var serverDefaultMinTargetMoveListSize = 3; var serverAbnormalMoveCount = 0; var serverLastRecvMove = 0; var serverLastAckMove = 0; diff --git a/src/net/PowerupPredictionStore.hx b/src/net/PowerupPredictionStore.hx index 974d9bb3..2bcb4923 100644 --- a/src/net/PowerupPredictionStore.hx +++ b/src/net/PowerupPredictionStore.hx @@ -6,11 +6,11 @@ import net.NetPacket.PowerupPickupPacket; class PowerupPredictionStore { var predictions:Array; - public function new() { + public inline function new() { predictions = []; } - public function alloc() { + public inline function alloc() { predictions.push(Math.NEGATIVE_INFINITY); } @@ -18,7 +18,7 @@ class PowerupPredictionStore { return predictions[netIndex]; } - public function acknowledgePowerupPickup(packet:PowerupPickupPacket, timeState:TimeState, futureTicks:Int) { + public inline function acknowledgePowerupPickup(packet:PowerupPickupPacket, timeState:TimeState, futureTicks:Int) { predictions[packet.powerupItemId] = timeState.currentAttemptTime - futureTicks * 0.032; // Approximate } }