From 13ab96f7b66b6b248e9da8e04e553b0835342d5c Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Wed, 28 Jun 2023 19:58:52 +0530 Subject: [PATCH] fix some bugs and clean up stuff --- src/Macros.hx | 3 +- src/Marble.hx | 2 ++ src/MarbleWorld.hx | 60 ++++++++++++++++++------------- src/PreviewWorld.hx | 1 + src/gui/MarblePickerGui.hx | 17 +++++++-- src/rewind/RewindFrame.hx | 2 -- src/rewind/RewindManager.hx | 2 -- src/triggers/CheckpointTrigger.hx | 16 +++++---- src/triggers/HelpTrigger.hx | 3 +- 9 files changed, 65 insertions(+), 41 deletions(-) diff --git a/src/Macros.hx b/src/Macros.hx index ef819c80..3f97e557 100644 --- a/src/Macros.hx +++ b/src/Macros.hx @@ -80,8 +80,6 @@ class MarbleWorldMacros { shape = new EasterEgg(cast element); else if (dataBlockLowerCase == "checkpointshape") { shape = new Checkpoint(cast element); - if (_previousCheckpointTrigger != null) - _previousCheckpointTrigger.checkpoint = cast shape; } else if (dataBlockLowerCase == "ductfan") shape = new DuctFan(); else if (dataBlockLowerCase == "smallductfan") @@ -152,6 +150,7 @@ class MarbleWorldMacros { mat.setPosition(shapePosition); this.addDtsObject(shape, () -> { + addToSimgroup(shape, simGroup); shape.setTransform(mat); onFinish(); }); diff --git a/src/Marble.hx b/src/Marble.hx index df5ae605..1b55e34a 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -1945,6 +1945,7 @@ class Marble extends GameObject { this.helicopter.setPosition(x, y, z); this.helicopter.setRotationQuat(this.level.getOrientationQuat(currentTime)); this.helicopterSound.pause = false; + this.helicopter.setScale(this._renderScale); } else { this.helicopter.setPosition(1e8, 1e8, 1e8); this.helicopterSound.pause = true; @@ -1952,6 +1953,7 @@ class Marble extends GameObject { if (currentTime - this.blastUseTime < this.blastWave.dts.sequences[0].duration) { this.blastWave.setPosition(x, y, z); this.blastWave.setRotationQuat(this.level.getOrientationQuat(this.level.timeState.currentAttemptTime)); + this.blastWave.setScale(this._renderScale); } else { this.blastWave.setPosition(1e8, 1e8, 1e8); } diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index d0a3b6d2..989f23d6 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -104,6 +104,7 @@ class MarbleWorld extends Scheduler { public var triggers:Array = []; public var gems:Array = []; public var namedObjects:Map = []; + public var simGroups:Map> = []; var shapeImmunity:Array = []; var shapeOrTriggerInside:Array = []; @@ -160,10 +161,8 @@ class MarbleWorld extends Scheduler { var currentCheckpointTrigger:CheckpointTrigger = null; var checkpointCollectedGems:Map = []; var checkpointHeldPowerup:PowerUp = null; - var checkpointUp:Vector = null; var cheeckpointBlast:Float = 0; var checkpointSequence:Int = 0; - var _previousCheckpointTrigger:CheckpointTrigger; // Replay public var replay:Replay; @@ -389,6 +388,7 @@ class MarbleWorld extends Scheduler { marblefiles.push("shapes/balls/marble20.normal.png"); marblefiles.push("shapes/balls/marble18.normal.png"); marblefiles.push("shapes/balls/marble01.normal.png"); + marblefiles.push("shapes/balls/marble02.normal.png"); marblefiles.push("sound/use_blast.wav"); } // Hacky @@ -444,7 +444,6 @@ class MarbleWorld extends Scheduler { this.currentCheckpointTrigger = null; this.checkpointCollectedGems.clear(); this.checkpointHeldPowerup = null; - this.checkpointUp = null; this.cheeckpointBlast = 0; this.checkpointSequence = 0; @@ -552,6 +551,15 @@ class MarbleWorld extends Scheduler { }; } + function addToSimgroup(obj:GameObject, simGroup:MissionElementSimGroup) { + if (simGroup == null) + return; + if (!simGroups.exists(simGroup)) + simGroups[simGroup] = [obj]; + else + simGroups[simGroup].push(obj); + } + public function addSimGroup(simGroup:MissionElementSimGroup) { if (simGroup.elements.filter((element) -> element._type == MissionElementType.PathedInterior).length != 0) { // Create the pathed interior @@ -583,15 +591,15 @@ class MarbleWorld extends Scheduler { case MissionElementType.SimGroup: this.addSimGroup(cast element); case MissionElementType.InteriorInstance: - resourceLoadFuncs.push(fwd -> this.addInteriorFromMis(cast element, fwd)); + resourceLoadFuncs.push(fwd -> this.addInteriorFromMis(cast element, simGroup, fwd)); case MissionElementType.StaticShape: - resourceLoadFuncs.push(fwd -> this.addStaticShape(cast element, fwd)); + resourceLoadFuncs.push(fwd -> this.addStaticShape(cast element, simGroup, fwd)); case MissionElementType.Item: - resourceLoadFuncs.push(fwd -> this.addItem(cast element, fwd)); + resourceLoadFuncs.push(fwd -> this.addItem(cast element, simGroup, fwd)); case MissionElementType.Trigger: - resourceLoadFuncs.push(fwd -> this.addTrigger(cast element, fwd)); + resourceLoadFuncs.push(fwd -> this.addTrigger(cast element, simGroup, fwd)); case MissionElementType.TSStatic: - resourceLoadFuncs.push(fwd -> this.addTSStatic(cast element, fwd)); + resourceLoadFuncs.push(fwd -> this.addTSStatic(cast element, simGroup, fwd)); case MissionElementType.ParticleEmitterNode: resourceLoadFuncs.push(fwd -> { this.addParticleEmitterNode(cast element); @@ -602,7 +610,7 @@ class MarbleWorld extends Scheduler { } } - public function addInteriorFromMis(element:MissionElementInteriorInstance, onFinish:Void->Void) { + public function addInteriorFromMis(element:MissionElementInteriorInstance, simGroup:MissionElementSimGroup, onFinish:Void->Void) { var difPath = this.mission.getDifPath(element.interiorfile); if (difPath == "") { onFinish(); @@ -614,6 +622,8 @@ class MarbleWorld extends Scheduler { // DifBuilder.loadDif(difPath, interior); // this.interiors.push(interior); this.addInterior(interior, () -> { + addToSimgroup(interior, simGroup); + var interiorPosition = MisParser.parseVector3(element.position); interiorPosition.x = -interiorPosition.x; var interiorRotation = MisParser.parseRotation(element.rotation); @@ -649,17 +659,17 @@ class MarbleWorld extends Scheduler { // this.physics.addInterior(interior); } - public function addStaticShape(element:MissionElementStaticShape, onFinish:Void->Void) { + public function addStaticShape(element:MissionElementStaticShape, simGroup:MissionElementSimGroup, onFinish:Void->Void) { var shape:DtsObject = null; MarbleWorldMacros.addStaticShapeOrItem(); } - public function addItem(element:MissionElementItem, onFinish:Void->Void) { + public function addItem(element:MissionElementItem, simGroup:MissionElementSimGroup, onFinish:Void->Void) { var shape:DtsObject = null; MarbleWorldMacros.addStaticShapeOrItem(); } - public function addTrigger(element:MissionElementTrigger, onFinish:Void->Void) { + public function addTrigger(element:MissionElementTrigger, simGroup:MissionElementSimGroup, onFinish:Void->Void) { var trigger:Trigger = null; var datablockLowercase = element.datablock.toLowerCase(); @@ -672,8 +682,9 @@ class MarbleWorld extends Scheduler { } else if (datablockLowercase == "helptrigger") { trigger = new HelpTrigger(element, cast this); } else if (datablockLowercase == "checkpointtrigger") { - trigger = new CheckpointTrigger(element, cast this); - _previousCheckpointTrigger = cast trigger; + var chk = new CheckpointTrigger(element, cast this); + trigger = chk; + chk.simGroup = simGroup; } else { Console.error("Unknown trigger: " + element.datablock); onFinish(); @@ -682,12 +693,13 @@ class MarbleWorld extends Scheduler { trigger.init(() -> { this.triggers.push(trigger); + addToSimgroup(trigger, simGroup); this.collisionWorld.addEntity(trigger.collider); onFinish(); }); } - public function addTSStatic(element:MissionElementTSStatic, onFinish:Void->Void) { + public function addTSStatic(element:MissionElementTSStatic, simGroup:MissionElementSimGroup, onFinish:Void->Void) { // !! WARNING - UNTESTED !! var shapeName = element.shapename; var index = shapeName.indexOf('data/'); @@ -740,6 +752,7 @@ class MarbleWorld extends Scheduler { mat.setPosition(shapePosition); this.addDtsObject(tsShape, () -> { + addToSimgroup(tsShape, simGroup); tsShape.setTransform(mat); onFinish(); }, true); @@ -1606,7 +1619,6 @@ class MarbleWorld extends Scheduler { this.currentCheckpoint = shape; this.currentCheckpointTrigger = trigger; this.checkpointCollectedGems.clear(); - this.checkpointUp = this.currentUp.clone(); this.cheeckpointBlast = this.blastAmount; // Remember all gems that were collected up to this point for (gem in this.gems) { @@ -1624,6 +1636,7 @@ class MarbleWorld extends Scheduler { var marble = this.marble; // Determine where to spawn the marble var offset = new Vector(0, 0, 0.727843); + offset.transform(this.currentCheckpoint.getRotationQuat().toMatrix()); var mpos = this.currentCheckpoint.getAbsPos().getPosition().add(offset); this.marble.setMarblePosition(mpos.x, mpos.y, mpos.z); marble.velocity.load(new Vector(0, 0, 0)); @@ -1654,15 +1667,12 @@ class MarbleWorld extends Scheduler { gravityField = @:privateAccess this.currentCheckpointTrigger.element.fields.get('gravity')[0]; } } - if (MisParser.parseBoolean(gravityField)) { - // In this case, we set the gravity to the relative "up" vector of the checkpoint shape. - var up = new Vector(0, 0, 1); - up.transform(this.currentCheckpoint.getRotationQuat().toMatrix()); - this.setUp(up, this.timeState, true); - } else { - // Otherwise, we restore gravity to what was stored. - this.setUp(this.checkpointUp, this.timeState, true); - } + + // In this case, we set the gravity to the relative "up" vector of the checkpoint shape. + var up = new Vector(0, 0, 1); + up.transform(this.currentCheckpoint.getRotationQuat().toMatrix()); + this.setUp(up, this.timeState, true); + // Restore gem states for (gem in this.gems) { if (gem.pickedUp && !this.checkpointCollectedGems.exists(gem)) { diff --git a/src/PreviewWorld.hx b/src/PreviewWorld.hx index 830bc082..978cd2ca 100644 --- a/src/PreviewWorld.hx +++ b/src/PreviewWorld.hx @@ -184,6 +184,7 @@ class PreviewWorld extends Scheduler { scene.camera.setFovX(90, Settings.optionsSettings.screenWidth / Settings.optionsSettings.screenHeight); + scene.camera.up.set(0, 0, 1); scene.camera.pos.load(camPos.add(off)); scene.camera.target.load(scene.camera.pos.add(directionVector)); } diff --git a/src/gui/MarblePickerGui.hx b/src/gui/MarblePickerGui.hx index eb09d388..3446f146 100644 --- a/src/gui/MarblePickerGui.hx +++ b/src/gui/MarblePickerGui.hx @@ -223,8 +223,16 @@ class MarblePickerGui extends GuiImage { } ]; - var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile(); + var res = ResourceLoader.getImage("data/ui/game/CloudBG.jpg").resource.toTile(); super(res); + + var fadeEdge = new GuiImage(ResourceLoader.getResource("data/ui/xbox/BG_fadeOutSoftEdge.png", ResourceLoader.getImage, this.imageResources).toTile()); + fadeEdge.position = new Vector(0, 0); + fadeEdge.extent = new Vector(640, 480); + fadeEdge.vertSizing = Height; + fadeEdge.horizSizing = Width; + this.addChild(fadeEdge); + var domcasual32fontdata = ResourceLoader.getFileEntry("data/font/DomCasualD.fnt"); var domcasual32b = new BitmapFont(domcasual32fontdata.entry); @:privateAccess domcasual32b.loader = ResourceLoader.loader; @@ -267,6 +275,7 @@ class MarblePickerGui extends GuiImage { var prevPreview = @:privateAccess MarbleGame.instance.previewWorld.currentMission; MarbleGame.instance.setPreviewMission("marblepicker", () -> { + this.bmp.visible = false; @:privateAccess MarbleGame.instance.previewWorld.spawnMarble(marb -> { var spawnPos = @:privateAccess MarbleGame.instance.scene.camera.pos.add(new Vector(0, 1, 1)); var velAdd = new Vector((1 - 2 * Math.random()) * 2, (1 - 2 * Math.random()) * 1.5, (1 - 2 * Math.random()) * 1); @@ -319,8 +328,10 @@ class MarblePickerGui extends GuiImage { backButton.horizSizing = Right; backButton.gamepadAccelerator = ["OK"]; backButton.pressedAction = (e) -> { - MarbleGame.canvas.setContent(new OptionsListGui()); - MarbleGame.instance.setPreviewMission(prevPreview, () -> {}, false); + this.bmp.visible = true; + MarbleGame.instance.setPreviewMission(prevPreview, () -> { + MarbleGame.canvas.setContent(new OptionsListGui()); + }, false); }; bottomBar.addChild(backButton); diff --git a/src/rewind/RewindFrame.hx b/src/rewind/RewindFrame.hx index 83f3ade9..2e2a088e 100644 --- a/src/rewind/RewindFrame.hx +++ b/src/rewind/RewindFrame.hx @@ -43,7 +43,6 @@ class RewindFrame { currentCheckpointTrigger:CheckpointTrigger, checkpointCollectedGems:Map, checkpointHeldPowerup:PowerUp, - checkpointUp:Vector, checkpointBlast:Float }; @@ -95,7 +94,6 @@ class RewindFrame { currentCheckpointTrigger: checkpointState.currentCheckpointTrigger, checkpointCollectedGems: checkpointState.checkpointCollectedGems.copy(), checkpointHeldPowerup: checkpointState.checkpointHeldPowerup, - checkpointUp: checkpointState.checkpointUp != null ? checkpointState.checkpointUp.clone() : null, checkpointBlast: checkpointState.checkpointBlast, }; return c; diff --git a/src/rewind/RewindManager.hx b/src/rewind/RewindManager.hx index 40f2d7ec..c98de046 100644 --- a/src/rewind/RewindManager.hx +++ b/src/rewind/RewindManager.hx @@ -75,7 +75,6 @@ class RewindManager { checkpointBlast: @:privateAccess level.cheeckpointBlast, checkpointCollectedGems: @:privateAccess level.checkpointCollectedGems.copy(), checkpointHeldPowerup: @:privateAccess level.checkpointHeldPowerup, - checkpointUp: @:privateAccess level.checkpointUp != null ? @:privateAccess level.checkpointUp.clone() : null, }; frames.push(rf); } @@ -165,7 +164,6 @@ class RewindManager { level.marble.camera.oob = rf.oobState.oob; level.outOfBoundsTime = rf.oobState.timeState != null ? rf.oobState.timeState.clone() : null; level.blastAmount = rf.blastAmt; - @:privateAccess level.checkpointUp = rf.checkpointState.checkpointUp; @:privateAccess level.checkpointCollectedGems = rf.checkpointState.checkpointCollectedGems; @:privateAccess level.cheeckpointBlast = rf.checkpointState.checkpointBlast; @:privateAccess level.checkpointHeldPowerup = rf.checkpointState.checkpointHeldPowerup; diff --git a/src/triggers/CheckpointTrigger.hx b/src/triggers/CheckpointTrigger.hx index 7dbb7065..461b6b9f 100644 --- a/src/triggers/CheckpointTrigger.hx +++ b/src/triggers/CheckpointTrigger.hx @@ -1,5 +1,6 @@ package triggers; +import mis.MissionElement.MissionElementSimGroup; import shapes.Checkpoint; import h3d.Vector; import src.MarbleWorld; @@ -10,7 +11,7 @@ import mis.MisParser; class CheckpointTrigger extends Trigger { public var disableOOB = false; public var add:Vector = null; - public var checkpoint:Checkpoint; + public var simGroup:MissionElementSimGroup; public var seqNum:Int; override public function new(element:MissionElementTrigger, level:MarbleWorld) { @@ -29,13 +30,16 @@ class CheckpointTrigger extends Trigger { public override function onMarbleEnter(time:src.TimeState) { super.onMarbleEnter(time); - var shape = checkpoint; - if (shape == null) + if (simGroup == null) return; - if (this.level.saveCheckpointState(shape, this)) { - shape.lastActivatedTime = time.timeSinceLoad; + var shape = level.simGroups[simGroup].filter(x -> x.identifier == "Checkpoint"); + if (shape.length == 0) + return; + var chk:Checkpoint = cast shape[0]; + if (this.level.saveCheckpointState(chk, this)) { + chk.lastActivatedTime = time.timeSinceLoad; for (obj in this.level.dtsObjects) { - if (obj.identifier == "Checkpoint" && obj != shape) + if (obj.identifier == "Checkpoint" && obj != chk) cast(obj, Checkpoint).lastActivatedTime = Math.POSITIVE_INFINITY; } } diff --git a/src/triggers/HelpTrigger.hx b/src/triggers/HelpTrigger.hx index a5282f86..5cc31c2f 100644 --- a/src/triggers/HelpTrigger.hx +++ b/src/triggers/HelpTrigger.hx @@ -7,7 +7,8 @@ import src.AudioManager; class HelpTrigger extends Trigger { override function onMarbleEnter(timeState:TimeState) { AudioManager.playSound(ResourceLoader.getResource('data/sound/infotutorial.wav', ResourceLoader.getAudio, this.soundResources)); - this.level.displayHelp(this.element.text); + if (this.element.text != null && this.element.text != "") + this.level.displayHelp(this.element.text); // this.level.replay.recordMarbleEnter(this); }