mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2026-04-27 05:01:38 +00:00
remove some more stuff
This commit is contained in:
parent
078f2c9a58
commit
ce9f8f3b1d
9 changed files with 0 additions and 559 deletions
|
|
@ -37,14 +37,8 @@ import gui.MainMenuGui;
|
||||||
import gui.ReplayCenterGui;
|
import gui.ReplayCenterGui;
|
||||||
#end
|
#end
|
||||||
import collision.Collision;
|
import collision.Collision;
|
||||||
import shapes.MegaMarble;
|
|
||||||
import shapes.Blast;
|
|
||||||
import shapes.Checkpoint;
|
|
||||||
import triggers.CheckpointTrigger;
|
|
||||||
import shapes.EasterEgg;
|
import shapes.EasterEgg;
|
||||||
import shapes.Sign;
|
import shapes.Sign;
|
||||||
import triggers.TeleportTrigger;
|
|
||||||
import triggers.DestinationTrigger;
|
|
||||||
import shapes.Magnet;
|
import shapes.Magnet;
|
||||||
import src.Replay;
|
import src.Replay;
|
||||||
import gui.Canvas;
|
import gui.Canvas;
|
||||||
|
|
@ -189,14 +183,6 @@ class MarbleWorld extends Scheduler {
|
||||||
|
|
||||||
public var newOrientationQuat = new Quat();
|
public var newOrientationQuat = new Quat();
|
||||||
|
|
||||||
// Checkpoint
|
|
||||||
var currentCheckpoint:{obj:DtsObject, elem:MissionElementBase} = null;
|
|
||||||
var currentCheckpointTrigger:CheckpointTrigger = null;
|
|
||||||
var checkpointCollectedGems:Map<Gem, Bool> = [];
|
|
||||||
var checkpointHeldPowerup:PowerUp = null;
|
|
||||||
var checkpointUp:Vector = null;
|
|
||||||
var cheeckpointBlast:Float = 0;
|
|
||||||
|
|
||||||
// Replay
|
// Replay
|
||||||
public var replay:Replay;
|
public var replay:Replay;
|
||||||
public var isWatching:Bool = false;
|
public var isWatching:Bool = false;
|
||||||
|
|
@ -607,10 +593,6 @@ class MarbleWorld extends Scheduler {
|
||||||
|
|
||||||
public function restart(marble:Marble, full:Bool = false) {
|
public function restart(marble:Marble, full:Bool = false) {
|
||||||
Console.log("LEVEL RESTART");
|
Console.log("LEVEL RESTART");
|
||||||
if (!full && this.currentCheckpoint != null) {
|
|
||||||
this.loadCheckpointState();
|
|
||||||
return 0; // Load checkpoint
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!full) {
|
if (!full) {
|
||||||
var respawnT = this.gameMode.getRespawnTransform(marble);
|
var respawnT = this.gameMode.getRespawnTransform(marble);
|
||||||
|
|
@ -641,13 +623,6 @@ class MarbleWorld extends Scheduler {
|
||||||
this.marble.outOfBoundsTime = null;
|
this.marble.outOfBoundsTime = null;
|
||||||
this.finishTime = null;
|
this.finishTime = null;
|
||||||
|
|
||||||
this.currentCheckpoint = null;
|
|
||||||
this.currentCheckpointTrigger = null;
|
|
||||||
this.checkpointCollectedGems.clear();
|
|
||||||
this.checkpointHeldPowerup = null;
|
|
||||||
this.checkpointUp = null;
|
|
||||||
this.cheeckpointBlast = 0;
|
|
||||||
|
|
||||||
if (this.endPad != null)
|
if (this.endPad != null)
|
||||||
this.endPad.inFinish = false;
|
this.endPad.inFinish = false;
|
||||||
if (this.totalGems > 0) {
|
if (this.totalGems > 0) {
|
||||||
|
|
@ -2418,125 +2393,6 @@ class MarbleWorld extends Scheduler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets a new active checkpoint. */
|
|
||||||
public function saveCheckpointState(shape:{obj:DtsObject, elem:MissionElementBase}, trigger:CheckpointTrigger = null) {
|
|
||||||
if (this.currentCheckpoint != null)
|
|
||||||
if (this.currentCheckpoint.obj == shape.obj)
|
|
||||||
return;
|
|
||||||
var disableOob = false;
|
|
||||||
if (shape != null) {
|
|
||||||
if (shape.elem.fields.exists('disableOob')) {
|
|
||||||
disableOob = MisParser.parseBoolean(shape.elem.fields.get('disableOob')[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (trigger != null) {
|
|
||||||
disableOob = trigger.disableOOB;
|
|
||||||
}
|
|
||||||
// (shape.srcElement as any) ?.disableOob || trigger?.element.disableOob;
|
|
||||||
if (disableOob && this.marble.outOfBounds)
|
|
||||||
return; // The checkpoint is configured to not work when the player is already OOB
|
|
||||||
this.currentCheckpoint = shape;
|
|
||||||
this.currentCheckpointTrigger = trigger;
|
|
||||||
this.checkpointCollectedGems.clear();
|
|
||||||
this.checkpointUp = this.marble.currentUp.clone();
|
|
||||||
this.cheeckpointBlast = this.marble.blastAmount;
|
|
||||||
// Remember all gems that were collected up to this point
|
|
||||||
for (gem in this.gems) {
|
|
||||||
if (gem.pickedUp)
|
|
||||||
this.checkpointCollectedGems.set(gem, true);
|
|
||||||
}
|
|
||||||
this.checkpointHeldPowerup = this.marble.heldPowerup;
|
|
||||||
this.displayAlert("Checkpoint reached!");
|
|
||||||
AudioManager.playSound(ResourceLoader.getResource('data/sound/checkpoint.wav', ResourceLoader.getAudio, this.soundResources));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Resets to the last stored checkpoint state. */
|
|
||||||
public function loadCheckpointState() {
|
|
||||||
var marble = this.marble;
|
|
||||||
// Determine where to spawn the marble
|
|
||||||
var offset = new Vector(0, 0, 3);
|
|
||||||
var add = ""; // (this.currentCheckpoint.srcElement as any)?.add || this.currentCheckpointTrigger?.element.add;
|
|
||||||
if (this.currentCheckpoint.elem.fields.exists('add')) {
|
|
||||||
add = this.currentCheckpoint.elem.fields.get('add')[0];
|
|
||||||
}
|
|
||||||
var sub = "";
|
|
||||||
if (this.currentCheckpoint.elem.fields.exists('sub')) {
|
|
||||||
sub = this.currentCheckpoint.elem.fields.get('sub')[0];
|
|
||||||
}
|
|
||||||
if (this.currentCheckpointTrigger != null) {
|
|
||||||
if (this.currentCheckpointTrigger.add != null)
|
|
||||||
offset = this.currentCheckpointTrigger.add;
|
|
||||||
}
|
|
||||||
if (add != "") {
|
|
||||||
offset = MisParser.parseVector3(add);
|
|
||||||
offset.x = -offset.x;
|
|
||||||
}
|
|
||||||
if (sub != "") {
|
|
||||||
offset = MisParser.parseVector3(sub).multiply(-1);
|
|
||||||
offset.x = -offset.x;
|
|
||||||
}
|
|
||||||
var mpos = this.currentCheckpoint.obj.getAbsPos().getPosition().add(offset);
|
|
||||||
this.marble.setMarblePosition(mpos.x, mpos.y, mpos.z);
|
|
||||||
marble.velocity.load(new Vector(0, 0, 0));
|
|
||||||
marble.omega.load(new Vector(0, 0, 0));
|
|
||||||
Console.log('Respawn:');
|
|
||||||
Console.log('Marble Position: ${mpos.x} ${mpos.y} ${mpos.z}');
|
|
||||||
Console.log('Marble Velocity: ${marble.velocity.x} ${marble.velocity.y} ${marble.velocity.z}');
|
|
||||||
Console.log('Marble Angular: ${marble.omega.x} ${marble.omega.y} ${marble.omega.z}');
|
|
||||||
// Set camera orientation
|
|
||||||
var euler = this.currentCheckpoint.obj.getRotationQuat().toEuler();
|
|
||||||
this.marble.camera.CameraYaw = euler.z + Math.PI / 2;
|
|
||||||
this.marble.camera.CameraPitch = 0.45;
|
|
||||||
this.marble.camera.nextCameraYaw = this.marble.camera.CameraYaw;
|
|
||||||
this.marble.camera.nextCameraPitch = this.marble.camera.CameraPitch;
|
|
||||||
this.marble.camera.oob = false;
|
|
||||||
@:privateAccess this.marble.superBounceEnableTime = -1e8;
|
|
||||||
@:privateAccess this.marble.shockAbsorberEnableTime = -1e8;
|
|
||||||
@:privateAccess this.marble.helicopterEnableTime = -1e8;
|
|
||||||
@:privateAccess this.marble.megaMarbleEnableTime = -1e8;
|
|
||||||
this.marble.blastAmount = this.cheeckpointBlast;
|
|
||||||
if (this.isRecording) {
|
|
||||||
this.replay.recordCameraState(this.marble.camera.CameraYaw, this.marble.camera.CameraPitch);
|
|
||||||
this.replay.recordMarbleInput(0, 0);
|
|
||||||
this.replay.recordMarbleState(mpos, marble.velocity, marble.getRotationQuat(), marble.omega);
|
|
||||||
this.replay.recordMarbleStateFlags(false, false, true, false);
|
|
||||||
}
|
|
||||||
var gravityField = ""; // (this.currentCheckpoint.srcElement as any) ?.gravity || this.currentCheckpointTrigger?.element.gravity;
|
|
||||||
if (this.currentCheckpoint.elem.fields.exists('gravity')) {
|
|
||||||
gravityField = this.currentCheckpoint.elem.fields.get('gravity')[0];
|
|
||||||
}
|
|
||||||
if (this.currentCheckpointTrigger != null) {
|
|
||||||
if (@:privateAccess this.currentCheckpointTrigger.element.fields.exists('gravity')) {
|
|
||||||
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.obj.getRotationQuat().toMatrix());
|
|
||||||
this.setUp(this.marble, up, this.timeState, true);
|
|
||||||
} else {
|
|
||||||
// Otherwise, we restore gravity to what was stored.
|
|
||||||
this.setUp(this.marble, this.checkpointUp, this.timeState, true);
|
|
||||||
}
|
|
||||||
// Restore gem states
|
|
||||||
for (gem in this.gems) {
|
|
||||||
if (gem.pickedUp && !this.checkpointCollectedGems.exists(gem)) {
|
|
||||||
gem.reset();
|
|
||||||
this.gemCount--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.playGui.formatGemCounter(this.gemCount, this.totalGems);
|
|
||||||
this.playGui.setCenterText('none');
|
|
||||||
this.clearSchedule();
|
|
||||||
this.marble.outOfBounds = false;
|
|
||||||
this.deselectPowerUp(this.marble); // Always deselect first
|
|
||||||
// Wait a bit to select the powerup to prevent immediately using it incase the user skipped the OOB screen by clicking
|
|
||||||
if (this.checkpointHeldPowerup != null)
|
|
||||||
this.schedule(this.timeState.currentAttemptTime + 0.5, () -> this.pickUpPowerUp(this.marble, this.checkpointHeldPowerup));
|
|
||||||
AudioManager.playSound(ResourceLoader.getResource('data/sound/spawn.wav', ResourceLoader.getAudio, this.soundResources));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setCursorLock(enabled:Bool) {
|
public function setCursorLock(enabled:Bool) {
|
||||||
this.cursorLock = enabled;
|
this.cursorLock = enabled;
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
|
|
@ -2650,8 +2506,6 @@ class MarbleWorld extends Scheduler {
|
||||||
collisionWorld = null;
|
collisionWorld = null;
|
||||||
particleManager = null;
|
particleManager = null;
|
||||||
namedObjects = null;
|
namedObjects = null;
|
||||||
currentCheckpoint = null;
|
|
||||||
checkpointCollectedGems = null;
|
|
||||||
marble = null;
|
marble = null;
|
||||||
|
|
||||||
this._disposed = true;
|
this._disposed = true;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import haxe.io.Bytes;
|
||||||
import haxe.io.BytesBuffer;
|
import haxe.io.BytesBuffer;
|
||||||
import dif.io.BytesWriter;
|
import dif.io.BytesWriter;
|
||||||
import mis.MissionElement.MissionElementBase;
|
import mis.MissionElement.MissionElementBase;
|
||||||
import triggers.CheckpointTrigger;
|
|
||||||
import src.PathedInterior.PIState;
|
import src.PathedInterior.PIState;
|
||||||
import shapes.PowerUp;
|
import shapes.PowerUp;
|
||||||
import h3d.Vector;
|
import h3d.Vector;
|
||||||
|
|
@ -61,15 +60,6 @@ class RewindFrame {
|
||||||
timeState:TimeState
|
timeState:TimeState
|
||||||
};
|
};
|
||||||
|
|
||||||
var checkpointState:{
|
|
||||||
currentCheckpoint:{obj:DtsObject, elem:MissionElementBase},
|
|
||||||
currentCheckpointTrigger:CheckpointTrigger,
|
|
||||||
checkpointCollectedGems:Map<Gem, Bool>,
|
|
||||||
checkpointHeldPowerup:PowerUp,
|
|
||||||
checkpointUp:Vector,
|
|
||||||
checkpointBlast:Float
|
|
||||||
};
|
|
||||||
|
|
||||||
inline public function new() {}
|
inline public function new() {}
|
||||||
|
|
||||||
public inline function clone() {
|
public inline function clone() {
|
||||||
|
|
@ -102,17 +92,6 @@ class RewindFrame {
|
||||||
oob: oobState.oob,
|
oob: oobState.oob,
|
||||||
timeState: oobState.timeState != null ? oobState.timeState.clone() : null
|
timeState: oobState.timeState != null ? oobState.timeState.clone() : null
|
||||||
};
|
};
|
||||||
c.checkpointState = {
|
|
||||||
currentCheckpoint: checkpointState.currentCheckpoint != null ? {
|
|
||||||
obj: checkpointState.currentCheckpoint.obj,
|
|
||||||
elem: checkpointState.currentCheckpoint.elem,
|
|
||||||
} : null,
|
|
||||||
currentCheckpointTrigger: checkpointState.currentCheckpointTrigger,
|
|
||||||
checkpointCollectedGems: checkpointState.checkpointCollectedGems.copy(),
|
|
||||||
checkpointHeldPowerup: checkpointState.checkpointHeldPowerup,
|
|
||||||
checkpointUp: checkpointState.checkpointUp != null ? checkpointState.checkpointUp.clone() : null,
|
|
||||||
checkpointBlast: checkpointState.checkpointBlast,
|
|
||||||
};
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -154,21 +133,6 @@ class RewindFrame {
|
||||||
if (oobState.oob)
|
if (oobState.oob)
|
||||||
framesize += 1; // oobState.oob
|
framesize += 1; // oobState.oob
|
||||||
framesize += 32; // oobState.timeState
|
framesize += 32; // oobState.timeState
|
||||||
framesize += 1; // Null<checkpointState>
|
|
||||||
if (checkpointState != null) {
|
|
||||||
framesize += 4; // checkpointState.currentCheckpoint
|
|
||||||
}
|
|
||||||
framesize += 2; // checkpointState.currentCheckpointTrigger
|
|
||||||
framesize += 2; // checkpointState.checkpointCollectedGems.length
|
|
||||||
for (gem in checkpointState.checkpointCollectedGems.keys()) {
|
|
||||||
framesize += 2; // gem
|
|
||||||
framesize += 1; // checkpointState.checkpointCollectedGems[gem]
|
|
||||||
}
|
|
||||||
framesize += 2; // checkpointState.checkpointHeldPowerup
|
|
||||||
framesize += 1; // Null<checkpointState.checkpointUp>
|
|
||||||
if (checkpointState.checkpointUp != null)
|
|
||||||
framesize += 24; // checkpointState.checkpointUp
|
|
||||||
framesize += 8; // checkpointState.checkpointBlast
|
|
||||||
bb.prepare(framesize);
|
bb.prepare(framesize);
|
||||||
// Now actually write
|
// Now actually write
|
||||||
bb.writeDouble(timeState.currentAttemptTime);
|
bb.writeDouble(timeState.currentAttemptTime);
|
||||||
|
|
@ -247,29 +211,6 @@ class RewindFrame {
|
||||||
bb.writeDouble(oobState.timeState.gameplayClock);
|
bb.writeDouble(oobState.timeState.gameplayClock);
|
||||||
bb.writeDouble(oobState.timeState.dt);
|
bb.writeDouble(oobState.timeState.dt);
|
||||||
}
|
}
|
||||||
bb.writeByte(checkpointState.currentCheckpoint == null ? 0 : 1);
|
|
||||||
if (checkpointState.currentCheckpoint != null) {
|
|
||||||
bb.writeInt16(rm.allocGO(checkpointState.currentCheckpoint.obj));
|
|
||||||
bb.writeInt16(rm.allocME(checkpointState.currentCheckpoint.elem));
|
|
||||||
}
|
|
||||||
bb.writeInt16(rm.allocGO(checkpointState.currentCheckpointTrigger));
|
|
||||||
var chkgemcount = 0;
|
|
||||||
for (g in checkpointState.checkpointCollectedGems) {
|
|
||||||
chkgemcount++;
|
|
||||||
}
|
|
||||||
bb.writeInt16(chkgemcount);
|
|
||||||
for (gem in checkpointState.checkpointCollectedGems.keys()) {
|
|
||||||
bb.writeInt16(rm.allocGO(gem));
|
|
||||||
bb.writeByte(checkpointState.checkpointCollectedGems[gem] ? 1 : 0);
|
|
||||||
}
|
|
||||||
bb.writeInt16(rm.allocGO(checkpointState.checkpointHeldPowerup));
|
|
||||||
bb.writeByte(checkpointState.checkpointUp == null ? 0 : 1);
|
|
||||||
if (checkpointState.checkpointUp != null) {
|
|
||||||
bb.writeDouble(checkpointState.checkpointUp.x);
|
|
||||||
bb.writeDouble(checkpointState.checkpointUp.y);
|
|
||||||
bb.writeDouble(checkpointState.checkpointUp.z);
|
|
||||||
}
|
|
||||||
bb.writeDouble(checkpointState.checkpointBlast);
|
|
||||||
return bb.getBytes();
|
return bb.getBytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -380,35 +321,5 @@ class RewindFrame {
|
||||||
oobState.timeState.gameplayClock = br.readDouble();
|
oobState.timeState.gameplayClock = br.readDouble();
|
||||||
oobState.timeState.dt = br.readDouble();
|
oobState.timeState.dt = br.readDouble();
|
||||||
}
|
}
|
||||||
var hasCheckpoint = br.readByte() != 0;
|
|
||||||
checkpointState = {
|
|
||||||
currentCheckpoint: null,
|
|
||||||
currentCheckpointTrigger: null,
|
|
||||||
checkpointCollectedGems: new Map<Gem, Bool>(),
|
|
||||||
checkpointHeldPowerup: null,
|
|
||||||
checkpointUp: null,
|
|
||||||
checkpointBlast: 0.0,
|
|
||||||
};
|
|
||||||
if (hasCheckpoint) {
|
|
||||||
var co = rm.getGO(br.readInt16());
|
|
||||||
var ce = rm.getME(br.readInt16());
|
|
||||||
checkpointState.currentCheckpoint = {obj: cast co, elem: ce};
|
|
||||||
}
|
|
||||||
checkpointState.currentCheckpointTrigger = cast rm.getGO(br.readInt16());
|
|
||||||
var checkpointState_checkpointCollectedGems_len = br.readInt16();
|
|
||||||
for (i in 0...checkpointState_checkpointCollectedGems_len) {
|
|
||||||
var gem = cast rm.getGO(br.readInt16());
|
|
||||||
var c = br.readByte() != 0;
|
|
||||||
checkpointState.checkpointCollectedGems.set(cast gem, c);
|
|
||||||
}
|
|
||||||
checkpointState.checkpointHeldPowerup = cast rm.getGO(br.readInt16());
|
|
||||||
var checkpointState_checkpointUp_has = br.readByte() != 0;
|
|
||||||
if (checkpointState_checkpointUp_has) {
|
|
||||||
checkpointState.checkpointUp = new Vector();
|
|
||||||
checkpointState.checkpointUp.x = br.readDouble();
|
|
||||||
checkpointState.checkpointUp.y = br.readDouble();
|
|
||||||
checkpointState.checkpointUp.z = br.readDouble();
|
|
||||||
}
|
|
||||||
checkpointState.checkpointBlast = br.readDouble();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -98,14 +98,6 @@ class RewindManager {
|
||||||
oob: level.marble.outOfBounds,
|
oob: level.marble.outOfBounds,
|
||||||
timeState: level.marble.outOfBoundsTime != null ? level.marble.outOfBoundsTime.clone() : null
|
timeState: level.marble.outOfBoundsTime != null ? level.marble.outOfBoundsTime.clone() : null
|
||||||
};
|
};
|
||||||
rf.checkpointState = {
|
|
||||||
currentCheckpoint: @:privateAccess level.currentCheckpoint,
|
|
||||||
currentCheckpointTrigger: @:privateAccess level.currentCheckpointTrigger,
|
|
||||||
checkpointBlast: @:privateAccess level.cheeckpointBlast,
|
|
||||||
checkpointCollectedGems: @:privateAccess level.checkpointCollectedGems.copy(),
|
|
||||||
checkpointHeldPowerup: @:privateAccess level.checkpointHeldPowerup,
|
|
||||||
checkpointUp: @:privateAccess level.checkpointUp != null ? @:privateAccess level.checkpointUp.clone() : null,
|
|
||||||
};
|
|
||||||
frameElapsedTimes.push(level.timeState.currentAttemptTime);
|
frameElapsedTimes.push(level.timeState.currentAttemptTime);
|
||||||
frameDataOffsets.push(frameData.length);
|
frameDataOffsets.push(frameData.length);
|
||||||
var frameDataSerialized = rf.serialize(this);
|
var frameDataSerialized = rf.serialize(this);
|
||||||
|
|
@ -219,12 +211,6 @@ class RewindManager {
|
||||||
level.marble.camera.oob = rf.oobState.oob;
|
level.marble.camera.oob = rf.oobState.oob;
|
||||||
level.marble.outOfBoundsTime = rf.oobState.timeState != null ? rf.oobState.timeState.clone() : null;
|
level.marble.outOfBoundsTime = rf.oobState.timeState != null ? rf.oobState.timeState.clone() : null;
|
||||||
level.marble.blastAmount = rf.blastAmt;
|
level.marble.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;
|
|
||||||
@:privateAccess level.currentCheckpoint = rf.checkpointState.currentCheckpoint;
|
|
||||||
@:privateAccess level.currentCheckpointTrigger = rf.checkpointState.currentCheckpointTrigger;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNextRewindFrame(absTime:Float):RewindFrame {
|
public function getNextRewindFrame(absTime:Float):RewindFrame {
|
||||||
|
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
package shapes;
|
|
||||||
|
|
||||||
import src.MarbleWorld;
|
|
||||||
import src.ResourceLoader;
|
|
||||||
import src.TimeState;
|
|
||||||
import mis.MissionElement.MissionElementItem;
|
|
||||||
|
|
||||||
class Blast extends PowerUp {
|
|
||||||
public function new(element:MissionElementItem) {
|
|
||||||
super(element);
|
|
||||||
this.dtsPath = "data/shapes/items/blast.dts";
|
|
||||||
this.isCollideable = false;
|
|
||||||
this.isTSStatic = false;
|
|
||||||
this.showSequences = true;
|
|
||||||
this.identifier = "Blast";
|
|
||||||
this.pickUpName = "Blast PowerUp";
|
|
||||||
this.autoUse = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override function init(level:MarbleWorld, onFinish:Void->Void) {
|
|
||||||
super.init(level, () -> {
|
|
||||||
ResourceLoader.load("sound/publastvoice.wav").entry.load(() -> {
|
|
||||||
this.pickupSound = ResourceLoader.getResource("data/sound/publastvoice.wav", ResourceLoader.getAudio, this.soundResources);
|
|
||||||
onFinish();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pickUp(marble:src.Marble):Bool {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function use(marble:src.Marble, timeState:TimeState) {
|
|
||||||
marble.blastAmount = 1.03;
|
|
||||||
marble.blastTicks = 36000 >> 5; // Fix me
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
package shapes;
|
|
||||||
|
|
||||||
import collision.CollisionInfo;
|
|
||||||
import mis.MisParser;
|
|
||||||
import src.DtsObject;
|
|
||||||
import src.ResourceLoader;
|
|
||||||
import mis.MissionElement.MissionElementStaticShape;
|
|
||||||
|
|
||||||
class Checkpoint extends DtsObject {
|
|
||||||
public var disableOOB = false;
|
|
||||||
|
|
||||||
var element:MissionElementStaticShape;
|
|
||||||
|
|
||||||
public function new(element:MissionElementStaticShape) {
|
|
||||||
super();
|
|
||||||
this.dtsPath = "data/shapes/buttons/checkpoint.dts";
|
|
||||||
this.isCollideable = true;
|
|
||||||
this.isTSStatic = false;
|
|
||||||
this.identifier = "Checkpoint";
|
|
||||||
this.element = element;
|
|
||||||
|
|
||||||
this.disableOOB = element.fields.exists('disableOob') ? MisParser.parseBoolean(element.fields['disableOob'][0]) : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override function init(level:src.MarbleWorld, onFinish:() -> Void) {
|
|
||||||
super.init(level, () -> {
|
|
||||||
ResourceLoader.load("sound/checkpoint.wav").entry.load(onFinish);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public override function onMarbleContact(marble:src.Marble, time:src.TimeState, ?contact:CollisionInfo) {
|
|
||||||
this.level.saveCheckpointState({
|
|
||||||
obj: this,
|
|
||||||
elem: this.element
|
|
||||||
}, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
package shapes;
|
|
||||||
|
|
||||||
import src.ResourceLoaderWorker;
|
|
||||||
import src.MarbleWorld;
|
|
||||||
import src.ResourceLoader;
|
|
||||||
import src.TimeState;
|
|
||||||
import mis.MissionElement.MissionElementItem;
|
|
||||||
import src.AudioManager;
|
|
||||||
|
|
||||||
class MegaMarble extends PowerUp {
|
|
||||||
public function new(element:MissionElementItem) {
|
|
||||||
super(element);
|
|
||||||
this.dtsPath = "data/shapes/items/megamarble.dts";
|
|
||||||
this.isCollideable = false;
|
|
||||||
this.isTSStatic = false;
|
|
||||||
this.showSequences = true;
|
|
||||||
this.identifier = "MegaMarble";
|
|
||||||
this.pickUpName = "Mega Marble PowerUp";
|
|
||||||
}
|
|
||||||
|
|
||||||
public override function init(level:MarbleWorld, onFinish:Void->Void) {
|
|
||||||
super.init(level, () -> {
|
|
||||||
ResourceLoader.load("sound/pumegamarblevoice.wav").entry.load(() -> {
|
|
||||||
var worker = new ResourceLoaderWorker(onFinish);
|
|
||||||
worker.loadFile("sound/mega_bouncehard1.wav");
|
|
||||||
worker.loadFile("sound/mega_bouncehard2.wav");
|
|
||||||
worker.loadFile("sound/mega_bouncehard3.wav");
|
|
||||||
worker.loadFile("sound/mega_bouncehard4.wav");
|
|
||||||
worker.loadFile("sound/mega_roll.wav");
|
|
||||||
worker.loadFile("sound/dosuperjump.wav");
|
|
||||||
this.pickupSound = ResourceLoader.getResource("data/sound/pumegamarblevoice.wav", ResourceLoader.getAudio, this.soundResources);
|
|
||||||
worker.run();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pickUp(marble:src.Marble):Bool {
|
|
||||||
return this.level.pickUpPowerUp(marble, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function use(marble:src.Marble, timeState:TimeState) {
|
|
||||||
marble.enableMegaMarble(timeState);
|
|
||||||
this.level.deselectPowerUp(marble);
|
|
||||||
if (this.level.marble == marble && @:privateAccess !marble.isNetUpdate)
|
|
||||||
AudioManager.playSound(ResourceLoader.getResource('data/sound/dosuperjump.wav', ResourceLoader.getAudio, this.soundResources));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
package triggers;
|
|
||||||
|
|
||||||
import h3d.Vector;
|
|
||||||
import src.MarbleWorld;
|
|
||||||
import mis.MissionElement.MissionElementTrigger;
|
|
||||||
import src.ResourceLoader;
|
|
||||||
import mis.MisParser;
|
|
||||||
|
|
||||||
class CheckpointTrigger extends Trigger {
|
|
||||||
public var disableOOB = false;
|
|
||||||
public var add:Vector = null;
|
|
||||||
|
|
||||||
override public function new(element:MissionElementTrigger, level:MarbleWorld) {
|
|
||||||
super(element, level);
|
|
||||||
|
|
||||||
this.disableOOB = element.fields.exists('disableOob') ? MisParser.parseBoolean(element.fields['disableOob'][0]) : false;
|
|
||||||
this.add = element.fields.exists('add') ? MisParser.parseVector3(element.fields['add'][0]) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override function init(onFinish:() -> Void) {
|
|
||||||
super.init(() -> {
|
|
||||||
ResourceLoader.load("sound/checkpoint.wav").entry.load(onFinish);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public override function onMarbleEnter(marble:src.Marble, time:src.TimeState) {
|
|
||||||
super.onMarbleEnter(marble, time);
|
|
||||||
var shape = this.level.namedObjects.get(this.element.respawnpoint);
|
|
||||||
if (shape == null)
|
|
||||||
return;
|
|
||||||
this.level.saveCheckpointState(shape, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
package triggers;
|
|
||||||
|
|
||||||
class DestinationTrigger extends Trigger {
|
|
||||||
// Stub
|
|
||||||
}
|
|
||||||
|
|
@ -1,151 +0,0 @@
|
||||||
package triggers;
|
|
||||||
|
|
||||||
import src.Marble;
|
|
||||||
import h3d.Vector;
|
|
||||||
import src.ResourceLoader;
|
|
||||||
import src.AudioManager;
|
|
||||||
import mis.MisParser;
|
|
||||||
import src.MarbleWorld;
|
|
||||||
import mis.MissionElement.MissionElementTrigger;
|
|
||||||
import src.Console;
|
|
||||||
|
|
||||||
@:publicFields
|
|
||||||
@:structInit
|
|
||||||
class TeleportationState {
|
|
||||||
var entryTime:Null<Float>;
|
|
||||||
var exitTime:Null<Float>;
|
|
||||||
}
|
|
||||||
|
|
||||||
class TeleportTrigger extends Trigger {
|
|
||||||
var delay:Float = 2;
|
|
||||||
|
|
||||||
var marbleStates:Map<Marble, TeleportationState> = [];
|
|
||||||
|
|
||||||
public function new(element:MissionElementTrigger, level:MarbleWorld) {
|
|
||||||
super(element, level);
|
|
||||||
if (element.delay != null)
|
|
||||||
this.delay = MisParser.parseNumber(element.delay) / 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getState(marble:Marble) {
|
|
||||||
if (marbleStates.exists(marble))
|
|
||||||
return marbleStates.get(marble);
|
|
||||||
else {
|
|
||||||
marbleStates.set(marble, {entryTime: null, exitTime: null});
|
|
||||||
return marbleStates.get(marble);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override function onMarbleEnter(marble:src.Marble, time:src.TimeState) {
|
|
||||||
var state = getState(marble);
|
|
||||||
state.exitTime = null;
|
|
||||||
marble.setCloaking(true, time);
|
|
||||||
if (state.entryTime != null)
|
|
||||||
return;
|
|
||||||
state.entryTime = time.currentAttemptTime;
|
|
||||||
if (level.marble == marble && @:privateAccess !marble.isNetUpdate) {
|
|
||||||
this.level.displayAlert("Teleporter has been activated, please wait.");
|
|
||||||
AudioManager.playSound(ResourceLoader.getResource("data/sound/teleport.wav", ResourceLoader.getAudio, this.soundResources));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override function onMarbleLeave(marble:src.Marble, time:src.TimeState) {
|
|
||||||
var state = getState(marble);
|
|
||||||
state.exitTime = time.currentAttemptTime;
|
|
||||||
marble.setCloaking(false, time);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override function update(timeState:src.TimeState) {
|
|
||||||
for (marble => state in marbleStates) {
|
|
||||||
if (state.entryTime == null)
|
|
||||||
continue;
|
|
||||||
if (state.exitTime != null && timeState.currentAttemptTime - state.exitTime > 0.05) {
|
|
||||||
state.entryTime = null;
|
|
||||||
state.exitTime = null;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timeState.currentAttemptTime - state.entryTime >= this.delay) {
|
|
||||||
state.entryTime = null;
|
|
||||||
this.executeTeleport(marble);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override function init(onFinish:() -> Void) {
|
|
||||||
ResourceLoader.load("sound/teleport.wav").entry.load(onFinish);
|
|
||||||
}
|
|
||||||
|
|
||||||
function executeTeleport(marble:Marble) {
|
|
||||||
function chooseNonNull(a:String, b:String) {
|
|
||||||
if (a != null)
|
|
||||||
return a;
|
|
||||||
if (b != null)
|
|
||||||
return b;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the destination trigger
|
|
||||||
if (this.element.destination == null)
|
|
||||||
return;
|
|
||||||
var destinationList = this.level.triggers.filter(x -> x is DestinationTrigger
|
|
||||||
&& x.element._name.toLowerCase() == this.element.destination.toLowerCase());
|
|
||||||
if (destinationList.length == 0)
|
|
||||||
return; // Who knows
|
|
||||||
|
|
||||||
var destination = destinationList[0];
|
|
||||||
|
|
||||||
var pos = MisParser.parseVector3(destination.element.position);
|
|
||||||
pos.x = -pos.x;
|
|
||||||
|
|
||||||
// Determine where to place the marble
|
|
||||||
var position:Vector;
|
|
||||||
if (MisParser.parseBoolean(chooseNonNull(this.element.centerdestpoint, destination.element.centerdestpoint))) {
|
|
||||||
position = destination.collider.boundingBox.getCenter().toVector(); // Put the marble in the middle of the thing
|
|
||||||
} else {
|
|
||||||
position = destination.vertices[0].add(new Vector(0, 0, 3)).add(pos); // destination.vertices[0].clone().add(new Vector(0, 0, 3));
|
|
||||||
}
|
|
||||||
position.w = 1;
|
|
||||||
marble.prevPos.load(position);
|
|
||||||
marble.setPosition(position.x, position.y, position.z);
|
|
||||||
var ct = marble.collider.transform.clone();
|
|
||||||
ct.setPosition(position);
|
|
||||||
marble.collider.setTransform(ct);
|
|
||||||
if (this.level.isRecording) {
|
|
||||||
this.level.replay.recordMarbleStateFlags(false, false, true, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!MisParser.parseBoolean(chooseNonNull(this.element.keepvelocity, destination.element.keepvelocity)))
|
|
||||||
marble.velocity.set(0, 0, 0);
|
|
||||||
if (MisParser.parseBoolean(chooseNonNull(this.element.inversevelocity, destination.element.inversevelocity)))
|
|
||||||
marble.velocity.scale(-1);
|
|
||||||
if (!MisParser.parseBoolean(chooseNonNull(this.element.keepangular, destination.element.keepangular)))
|
|
||||||
marble.omega.set(0, 0, 0);
|
|
||||||
|
|
||||||
Console.log('Teleport:');
|
|
||||||
Console.log('Marble Position: ${position.x} ${position.y} ${position.z}');
|
|
||||||
Console.log('Marble Velocity: ${marble.velocity.x} ${marble.velocity.y} ${marble.velocity.z}');
|
|
||||||
Console.log('Marble Angular: ${marble.omega.x} ${marble.omega.y} ${marble.omega.z}');
|
|
||||||
|
|
||||||
// Determine camera orientation
|
|
||||||
if (marble == level.marble) {
|
|
||||||
if (!MisParser.parseBoolean(chooseNonNull(this.element.keepcamera, destination.element.keepcamera))) {
|
|
||||||
var yaw:Float;
|
|
||||||
if (this.element.camerayaw != null)
|
|
||||||
yaw = MisParser.parseNumber(this.element.camerayaw) * Math.PI / 180;
|
|
||||||
else if (destination.element.camerayaw != null)
|
|
||||||
yaw = MisParser.parseNumber(destination.element.camerayaw) * Math.PI / 180;
|
|
||||||
else
|
|
||||||
yaw = 0;
|
|
||||||
|
|
||||||
yaw = -yaw; // Need to flip it for some reason
|
|
||||||
|
|
||||||
marble.camera.CameraYaw = yaw + Math.PI / 2;
|
|
||||||
marble.camera.CameraPitch = 0.45;
|
|
||||||
marble.camera.nextCameraYaw = yaw + Math.PI / 2;
|
|
||||||
marble.camera.nextCameraPitch = 0.45;
|
|
||||||
}
|
|
||||||
AudioManager.playSound(ResourceLoader.getResource("data/sound/spawn.wav", ResourceLoader.getAudio, this.soundResources));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Reference in a new issue