diff --git a/marblegame.hl b/marblegame.hl index ff3f8970..1fff1b26 100644 Binary files a/marblegame.hl and b/marblegame.hl differ diff --git a/src/shapes/AbstractBumper.hx b/src/shapes/AbstractBumper.hx new file mode 100644 index 00000000..76e0e5cc --- /dev/null +++ b/src/shapes/AbstractBumper.hx @@ -0,0 +1,36 @@ +package shapes; + +import collision.CollisionInfo; +import src.DtsObject; +import src.TimeState; +import src.Util; + +class AbstractBumper extends DtsObject { + var lastContactTime = Math.NEGATIVE_INFINITY; + + override function update(timeState:src.TimeState) { + // Override the keyframe + var currentCompletion = getCurrentCompletion(timeState); + this.sequenceKeyframeOverride.set(this.dts.sequences[0], currentCompletion * (this.dts.sequences[0].numKeyFrames - 1)); + + super.update(timeState); + } + + function getCurrentCompletion(timeState:TimeState) { + var elapsed = timeState.timeSinceLoad - this.lastContactTime; + var completion = Util.clamp(elapsed / this.dts.sequences[0].duration, 0, 1); + return completion; + } + + override function onMarbleContact(time:TimeState, ?contact:CollisionInfo) { + super.onMarbleContact(time, contact); + if (time.timeSinceLoad - this.lastContactTime <= 0) + return; + var currentCompletion = this.getCurrentCompletion(time); + if (currentCompletion == 0 || currentCompletion == 1) { + this.lastContactTime = time.timeSinceLoad; + } + + // this.level.replay.recordMarbleContact(this); + } +} diff --git a/src/shapes/RoundBumper.hx b/src/shapes/RoundBumper.hx index be4e1b1e..6a3d0a6c 100644 --- a/src/shapes/RoundBumper.hx +++ b/src/shapes/RoundBumper.hx @@ -5,39 +5,11 @@ import src.DtsObject; import src.TimeState; import src.Util; -class RoundBumper extends DtsObject { - var lastContactTime = Math.NEGATIVE_INFINITY; - +class RoundBumper extends AbstractBumper { public function new() { super(); dtsPath = "data/shapes/bumpers/pball_round.dts"; isCollideable = true; identifier = "RoundBumper"; } - - override function update(timeState:src.TimeState) { - // Override the keyframe - var currentCompletion = getCurrentCompletion(timeState); - this.sequenceKeyframeOverride.set(this.dts.sequences[0], currentCompletion * (this.dts.sequences[0].numKeyFrames - 1)); - - super.update(timeState); - } - - function getCurrentCompletion(timeState:TimeState) { - var elapsed = timeState.timeSinceLoad - this.lastContactTime; - var completion = Util.clamp(elapsed / this.dts.sequences[0].duration, 0, 1); - return completion; - } - - override function onMarbleContact(time:TimeState, ?contact:CollisionInfo) { - super.onMarbleContact(time, contact); - if (time.timeSinceLoad - this.lastContactTime <= 0) - return; - var currentCompletion = this.getCurrentCompletion(time); - if (currentCompletion == 0 || currentCompletion == 1) { - this.lastContactTime = time.timeSinceLoad; - } - - // this.level.replay.recordMarbleContact(this); - } } diff --git a/src/shapes/TriangleBumper.hx b/src/shapes/TriangleBumper.hx index 22ea751a..6b72bb5d 100644 --- a/src/shapes/TriangleBumper.hx +++ b/src/shapes/TriangleBumper.hx @@ -2,7 +2,7 @@ package shapes; import src.DtsObject; -class TriangleBumper extends DtsObject { +class TriangleBumper extends AbstractBumper { public function new() { super(); dtsPath = "data/shapes/bumpers/pball_tri.dts";