Redirection de passage après la fin d'un timer

Bonjour je suis débutante sur TWINE, je travaille sur la version SugarCube 2.34.1.
J’ai actuellement un souci pour la redirection vers un passage après la fin d’un timer.
Dans le Javascript de l’histoire j’ai ajouté les éléments suivants (dsl par avance pour l’affichage):

/* COUNTDOWN TIMER FUNCTION */

(function () {

function formatMinutes(milliseconds) {
	var base = Number(milliseconds + 'e-3');
	var mins = Math.trunc(base / 60);
	var secs = Math.trunc(base % 60);
	if (secs < 10) {
		secs = '0' + secs;
	}
	return mins + ':' + secs;
}

$('<span id="countdown-timer-display"></span>').insertBefore('#story-caption');
var timerId;

setup.countdown = function (seconds, passage) {
	if (timerId) {
		throw new Error('countdown timer already running, terminating');
	}
	if (!seconds) {
		throw new Error('invalid countdown duration: ' + seconds);
	}

	if (!Story.has(passage)) {
		throw new Error('the passage "' + passage + '" does not exist');
	}

	var startTime = Date.now();
	var duration = seconds * 1000;
	timerId = setInterval(function () {
		var $display = $('#countdown-timer-display');

		if ($display.length === 0) {
			return;
		}
		var msRemaining = duration - (Date.now() - startTime);
		if (msRemaining > 1000) {
			$display.text("Temps restant avant démarrage CO2 "+formatMinutes(msRemaining));
		}
		else {
			clearInterval(timerId);
			timerId = null;
			$display.text("Martin est décédé");
		}
	}, 100);
};
$('<br><span id="countdown1-timer-display"></span></br>').insertBefore('#countdown-timer-display');

var timerId1;
setup.countdown1 = function (seconds, passage) {
	if (timerId1) {
		throw new Error('countdown timer already running, terminating');
	}

	if (!seconds) {
		throw new Error('invalid countdown duration: ' + seconds);
	}

	if (!Story.has(passage)) {
		throw new Error('the passage "' + passage + '" does not exist');
	}

	var startTime = Date.now();
	var duration = seconds * 1000;
	timerId1 = setInterval(function () {
		var $display = $('#countdown1-timer-display');

		if ($display.length === 0) {
			return;
		}

		var msRemaining = duration - (Date.now() - startTime);

		if (msRemaining > 1000) {
			$display.text("Temps restant avant fuite de pollution "+formatMinutes(msRemaining));
		}
		else {
			timerId1 = null;
			$display.text("Le site est pollué");
		}
	}, 100);
};

})();

Le timer est initié via un passage avec:

<<
if visited is 1>><<s…t>>
setup.countdown(
// Countdown duration (in seconds).
2 * 60,
// Name of passage to evaluate when countdown reaches zero.
‘ECHEC\ martin’
);
<</s…t>><>\

<<if visited() is 1>><<s…t>>
setup.countdown1(1 * 5,‘ECHEC\ SCADA’);
<</s…t>><>\

J’aimerais qu’à la fin du countdown, le passage intitulé ‘ECHEC\ martin’ s’ouvre automatiquement et ce quelque soit le moment au je suis dans l’histoire. Idem pour countdown1 vers le passage intitulé ‘ECHEC\ SCADA’.
Après des semaines de recherches et d’essais infructueux, aurriez vous quelque chose à me proposer?
Merci par avance

2 Likes

Salut! Avez-vous essayé cela?

https://twinery.org/cookbook/timedpassages/sugarcube/sugarcube_timedpassages.html

You might want to take a look at the “Countdown Timer” section of my Twine/SugarCube sample code collection for help with what you want to do. It even adds a visible indicator of the time remaining.

Hope that helps! :slight_smile:

P.S. I’m honestly surprised that my college French classes let me read about 80% of that without needing it to be translated. That said, Google Translate was required for writing this reply.

– Google Translated to French:

Vous voudrez peut-être jeter un œil à la section “Countdown Timer” (Compte à rebours) de ma collection d’exemples de code Twine/SugarCube pour obtenir de l’aide sur ce que vous voulez faire. Il ajoute même un indicateur visible du temps restant.

J’espère que cela pourra aider! :slight_smile:

P.S. Je suis honnêtement surpris que mes cours de français à l’université me permettent d’en lire environ 80% sans avoir besoin d’être traduit. Cela dit, Google Translate était nécessaire pour rédiger cette réponse.

1 Like

Merci pour vos réponses rapides, ça m’a beaucoup aidé :laughing:
j’ai dû adapté un peu pour mon usage, ça donne ça:

(j’ai dû ajouter des * par endroit car le code ne s’affichait pas…)
::StoryInit
<<set $s to 3600>><<set $s2 to 3600>>

::Timer
<span id=“countdown”>Temps restant avant fuite de pollution $q:$inter</span>
<<repeat 1s>>
<<set $s to $s - 1>>
<<set $inter=$s%60>>
<<set $k=$s-$inter>>
<<set $q=$k/60>>
<<if $s>0 >>
<<replace “#countdown”>>Temps restant avant fuite de pollution $q:$inter
<<*replace>>
<<*else>>
<<replace “#countdown”>><<*replace>>
<<goto “ECHEC\ SCADA”>>
<<stop>>
<<
/if>>
<<
/repeat>>

::Timer2
<span id=“countdown2”>Temps restant avant demarrage CO2 $q2:$inter2</span>
<<silently>>
<<repeat 1s>>
<<set $s2 to $s2 - 1>>
<<set $inter2=$s2%60>>
<<set $k2=$s2-$inter2>>
<<set $q2=$k2/60>>
<<if $s2>0 >>
<<replace “#countdown2”>>Temps restant avant demarrage CO2 $q2:$inter2<<
/replace>>
<<else>>
<<replace “#countdown2”>><<
/replace>>
<<goto “ECHEC\ martin”>>
<<stop>>
<<
/if>>
<</repeat>>
<<
/silently>>

::StoryCaption
<<if $key is true>><<set $s to $s=$s2-600>><<if $s<=0>>Le site est pollué<<else>><<include “Timer”>><</if>><</if>>
<<if $s2<=0>>Martin est décédé<><<include “Timer2”>><<
/if>>

In the future you can use a “preformatted text” block (the </> button in the editor toolbar) to make sure that your code appears properly in this forum.

Anyways, glad you got it working. :slight_smile:

– Google translation:

À l’avenir, vous pourrez utiliser un bloc “texte préformaté” (le bouton </> dans la barre d’outils de l’éditeur) pour vous assurer que votre code s’affiche correctement dans ce forum.

En tout cas, content que ça fonctionne. :slight_smile:

Bonjour Flolalie,
Je suis intéressé par le code final que vous avez mis pour votre compte à rebours. J’ai conscience que la conversation remonte, mais si jamais vous avez quelques minutes à me consacrer pour essayer de le retrouver, ça m’aiderait dans mon projet.
En vous remerciant,

Titouan Le Goff.