mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2026-04-28 05:31:37 +00:00
par time alarm
This commit is contained in:
parent
6993f18626
commit
e37853732f
4 changed files with 71 additions and 6 deletions
|
|
@ -129,6 +129,7 @@ class MarbleWorld extends Scheduler {
|
||||||
public var cursorLock:Bool = true;
|
public var cursorLock:Bool = true;
|
||||||
|
|
||||||
var timeTravelSound:Channel;
|
var timeTravelSound:Channel;
|
||||||
|
var alarmSound:Channel;
|
||||||
|
|
||||||
var helpTextTimeState:Float = -1e8;
|
var helpTextTimeState:Float = -1e8;
|
||||||
var alertTextTimeState:Float = -1e8;
|
var alertTextTimeState:Float = -1e8;
|
||||||
|
|
@ -327,7 +328,9 @@ class MarbleWorld extends Scheduler {
|
||||||
"sound/spawn.wav",
|
"sound/spawn.wav",
|
||||||
"sound/ready.wav",
|
"sound/ready.wav",
|
||||||
"sound/set.wav",
|
"sound/set.wav",
|
||||||
"sound/go.wav"
|
"sound/go.wav",
|
||||||
|
"sound/alarm.wav",
|
||||||
|
"sound/alarm_timeout.wav"
|
||||||
];
|
];
|
||||||
for (file in marblefiles) {
|
for (file in marblefiles) {
|
||||||
worker.loadFile(file);
|
worker.loadFile(file);
|
||||||
|
|
@ -367,6 +370,10 @@ class MarbleWorld extends Scheduler {
|
||||||
this.finishTime = null;
|
this.finishTime = null;
|
||||||
this.helpTextTimeState = Math.NEGATIVE_INFINITY;
|
this.helpTextTimeState = Math.NEGATIVE_INFINITY;
|
||||||
this.alertTextTimeState = Math.NEGATIVE_INFINITY;
|
this.alertTextTimeState = Math.NEGATIVE_INFINITY;
|
||||||
|
if (this.alarmSound != null) {
|
||||||
|
this.alarmSound.stop();
|
||||||
|
this.alarmSound = null;
|
||||||
|
}
|
||||||
|
|
||||||
this.currentCheckpoint = null;
|
this.currentCheckpoint = null;
|
||||||
this.currentCheckpointTrigger = null;
|
this.currentCheckpointTrigger = null;
|
||||||
|
|
@ -1067,16 +1074,36 @@ class MarbleWorld extends Scheduler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function determineClockColor(timeToDisplay:Float) {
|
||||||
|
if (this.timeState.currentAttemptTime < 3.5 || this.bonusTime > 0)
|
||||||
|
return 1;
|
||||||
|
if (timeToDisplay >= this.mission.qualifyTime)
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
if (this.timeState.currentAttemptTime >= 3.5) {
|
||||||
|
// Create the flashing effect
|
||||||
|
var alarmStart = this.mission.computeAlarmStartTime();
|
||||||
|
var elapsed = timeToDisplay - alarmStart;
|
||||||
|
if (elapsed < 0)
|
||||||
|
return 0;
|
||||||
|
if (Math.floor(elapsed) % 2 == 0)
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0; // Default yellow
|
||||||
|
}
|
||||||
|
|
||||||
public function updateTimer(dt:Float) {
|
public function updateTimer(dt:Float) {
|
||||||
this.timeState.dt = dt;
|
this.timeState.dt = dt;
|
||||||
var timerColor = 1;
|
|
||||||
|
var prevGameplayClock = this.timeState.gameplayClock;
|
||||||
|
|
||||||
if (!this.isWatching) {
|
if (!this.isWatching) {
|
||||||
if (this.bonusTime != 0 && this.timeState.currentAttemptTime >= 3.5) {
|
if (this.bonusTime != 0 && this.timeState.currentAttemptTime >= 3.5) {
|
||||||
this.bonusTime -= dt;
|
this.bonusTime -= dt;
|
||||||
if (this.bonusTime < 0) {
|
if (this.bonusTime < 0) {
|
||||||
this.timeState.gameplayClock -= this.bonusTime;
|
this.timeState.gameplayClock -= this.bonusTime;
|
||||||
this.bonusTime = 0;
|
this.bonusTime = 0;
|
||||||
timerColor = 0;
|
|
||||||
}
|
}
|
||||||
if (timeTravelSound == null) {
|
if (timeTravelSound == null) {
|
||||||
var ttsnd = ResourceLoader.getResource("data/sound/timetravelactive.wav", ResourceLoader.getAudio, this.soundResources);
|
var ttsnd = ResourceLoader.getResource("data/sound/timetravelactive.wav", ResourceLoader.getAudio, this.soundResources);
|
||||||
|
|
@ -1089,10 +1116,8 @@ class MarbleWorld extends Scheduler {
|
||||||
}
|
}
|
||||||
if (this.timeState.currentAttemptTime >= 3.5) {
|
if (this.timeState.currentAttemptTime >= 3.5) {
|
||||||
this.timeState.gameplayClock += dt;
|
this.timeState.gameplayClock += dt;
|
||||||
timerColor = 0;
|
|
||||||
} else if (this.timeState.currentAttemptTime + dt >= 3.5) {
|
} else if (this.timeState.currentAttemptTime + dt >= 3.5) {
|
||||||
this.timeState.gameplayClock += (this.timeState.currentAttemptTime + dt) - 3.5;
|
this.timeState.gameplayClock += (this.timeState.currentAttemptTime + dt) - 3.5;
|
||||||
timerColor = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.timeState.currentAttemptTime += dt;
|
this.timeState.currentAttemptTime += dt;
|
||||||
|
|
@ -1113,9 +1138,31 @@ class MarbleWorld extends Scheduler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.timeState.timeSinceLoad += dt;
|
this.timeState.timeSinceLoad += dt;
|
||||||
|
|
||||||
|
// Handle alarm warnings (that the user is about to exceed the par time)
|
||||||
|
if (this.timeState.currentAttemptTime >= 3.5) {
|
||||||
|
var alarmStart = this.mission.computeAlarmStartTime();
|
||||||
|
|
||||||
|
if (prevGameplayClock < alarmStart && this.timeState.gameplayClock >= alarmStart) {
|
||||||
|
// Start the alarm
|
||||||
|
this.alarmSound = AudioManager.playSound(ResourceLoader.getResource("data/sound/alarm.wav", ResourceLoader.getAudio, this.soundResources),
|
||||||
|
null, true); // AudioManager.createAudioSource('alarm.wav');
|
||||||
|
this.displayHelp('You have ${(this.mission.qualifyTime - alarmStart)} seconds remaining.');
|
||||||
|
}
|
||||||
|
if (prevGameplayClock < this.mission.qualifyTime && this.timeState.gameplayClock >= this.mission.qualifyTime) {
|
||||||
|
// Stop the alarm
|
||||||
|
if (this.alarmSound != null) {
|
||||||
|
this.alarmSound.stop();
|
||||||
|
this.alarmSound = null;
|
||||||
|
}
|
||||||
|
this.displayHelp("The clock has passed the Par Time.");
|
||||||
|
AudioManager.playSound(ResourceLoader.getResource("data/sound/alarm_timeout.wav", ResourceLoader.getAudio, this.soundResources));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (finishTime != null)
|
if (finishTime != null)
|
||||||
this.timeState.gameplayClock = finishTime.gameplayClock;
|
this.timeState.gameplayClock = finishTime.gameplayClock;
|
||||||
playGui.formatTimer(this.timeState.gameplayClock, timerColor);
|
playGui.formatTimer(this.timeState.gameplayClock, determineClockColor(this.timeState.gameplayClock));
|
||||||
|
|
||||||
if (!this.isWatching && this.isRecording)
|
if (!this.isWatching && this.isRecording)
|
||||||
this.replay.recordTimeState(timeState.currentAttemptTime, timeState.gameplayClock, this.bonusTime);
|
this.replay.recordTimeState(timeState.currentAttemptTime, timeState.gameplayClock, this.bonusTime);
|
||||||
|
|
|
||||||
|
|
@ -128,4 +128,17 @@ class Mission {
|
||||||
return dirpath + fname;
|
return dirpath + fname;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Computes the clock time in MBP when the user should be warned that they're about to exceed the par time. */
|
||||||
|
public function computeAlarmStartTime() {
|
||||||
|
var alarmStart = this.qualifyTime;
|
||||||
|
if (this.missionInfo.alarmstarttime != null)
|
||||||
|
alarmStart -= MisParser.parseNumber(this.missionInfo.alarmstarttime);
|
||||||
|
else {
|
||||||
|
alarmStart -= 15;
|
||||||
|
}
|
||||||
|
alarmStart = Math.max(0, alarmStart);
|
||||||
|
|
||||||
|
return alarmStart;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -290,10 +290,14 @@ class PlayGui {
|
||||||
// gemImageSceneTargetBitmap.blendMode = None;
|
// gemImageSceneTargetBitmap.blendMode = None;
|
||||||
// gemImageSceneTargetBitmap.addShader(new ColorKey());
|
// gemImageSceneTargetBitmap.addShader(new ColorKey());
|
||||||
|
|
||||||
|
var GEM_COLORS = ["blue", "red", "yellow", "purple", "green", "turquoise", "orange", "black"];
|
||||||
|
var gemColor = GEM_COLORS[Math.floor(Math.random() * GEM_COLORS.length)];
|
||||||
|
|
||||||
gemImageObject = new DtsObject();
|
gemImageObject = new DtsObject();
|
||||||
gemImageObject.dtsPath = "data/shapes/items/gem.dts";
|
gemImageObject.dtsPath = "data/shapes/items/gem.dts";
|
||||||
gemImageObject.ambientRotate = true;
|
gemImageObject.ambientRotate = true;
|
||||||
gemImageObject.showSequences = false;
|
gemImageObject.showSequences = false;
|
||||||
|
gemImageObject.matNameOverride.set('base.gem', gemColor + ".gem");
|
||||||
// gemImageObject.matNameOverride.set("base.gem", "base.gem.");
|
// gemImageObject.matNameOverride.set("base.gem", "base.gem.");
|
||||||
gemImageObject.ambientSpinFactor /= -2;
|
gemImageObject.ambientSpinFactor /= -2;
|
||||||
// ["base.gem"] = color + ".gem";
|
// ["base.gem"] = color + ".gem";
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@ class MissionElementScriptObject extends MissionElementBase {
|
||||||
var goldtime:String;
|
var goldtime:String;
|
||||||
var ultimatetime:String;
|
var ultimatetime:String;
|
||||||
var music:String;
|
var music:String;
|
||||||
|
var alarmstarttime:String;
|
||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
_type = MissionElementType.ScriptObject;
|
_type = MissionElementType.ScriptObject;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue