diff --git a/src/DifBuilder.hx b/src/DifBuilder.hx index 92b8283b..87c5f89f 100644 --- a/src/DifBuilder.hx +++ b/src/DifBuilder.hx @@ -103,6 +103,8 @@ class DifBuilder { for (j in hull.surfaceStart...(hull.surfaceStart + hull.surfaceCount)) { var surfaceindex = geo.hullSurfaceIndices[j]; var surface = geo.surfaces[surfaceindex]; + if (surface == null) + continue; var planeindex = surface.planeIndex; var planeFlipped = (planeindex & 0x8000) == 0x8000; diff --git a/src/Main.hx b/src/Main.hx index b8176e12..4aaf9ac3 100644 --- a/src/Main.hx +++ b/src/Main.hx @@ -52,7 +52,7 @@ class Main extends hxd.App { override function init() { super.init(); - var ltr = File.getContent("data/missions/beginner/movement.mis"); + var ltr = File.getContent("data/missions/advanced/acrobat.mis"); var mfp = new MisParser(ltr); var mis = mfp.parse(); diff --git a/src/Marble.hx b/src/Marble.hx index bae3f39d..27242adb 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -691,8 +691,8 @@ class Marble extends GameObject { if (timeRemaining <= 0) break; - var timeStep = 0.00800000037997961; - if (timeRemaining < 0.00800000037997961) + var timeStep = 0.002; + if (timeRemaining < 0.002) timeStep = timeRemaining; var tempState = timeState.clone(); @@ -774,9 +774,15 @@ class Marble extends GameObject { this.heldPowerup = null; } + if (this.controllable) { + var tempTimeState = timeState.clone(); + tempState.currentAttemptTime = piTime; + tempState.dt = timeStep; + this.level.callCollisionHandlers(cast this, tempTimeState); + } + timeRemaining -= timeStep; - it++; - } while (it <= 10); + } while (true); this.queuedContacts = []; } diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 5ac00bea..a6628ac2 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -593,9 +593,6 @@ class MarbleWorld extends Scheduler { this.particleManager.update(1000 * timeState.timeSinceLoad, dt); this.playGui.update(timeState); - if (this.marble != null) { - callCollisionHandlers(marble); - } this.updateTexts(); } @@ -677,7 +674,7 @@ class MarbleWorld extends Scheduler { this.playGui.formatGemCounter(this.gemCount, this.totalGems); } - function callCollisionHandlers(marble:Marble) { + public function callCollisionHandlers(marble:Marble, timeState:TimeState) { var contacts = this.collisionWorld.radiusSearch(marble.getAbsPos().getPosition(), marble._radius); var newImmunity = []; var calledShapes = [];