$machine->addTransition(new Transition($drunk, $sleep, 'crash'));
$machine->addTransition(new Transition($drunk, $high, 'weedz'));
$machine->addTransition(new Transition($sleep, $hungry, 'wakeup'));
$machine->addTransition(new Transition($drunk, $dead, 'moreboozzz'));
$machine->addTransition(new Transition($smoking, $hungry, 'munchies'));
$machine->addTransition(new Transition($eating, $smoking, 'izzum'));
//http://www.urbandictionary.com/define.php?term=Izzum
$machine->addTransition(new Transition($smoking, $high, 'foshizzle'));
$machine->addTransition(new Transition($high, $dead, 'moreweedzzz'));
$machine->addTransition(new Transition($high, $sleep, 'pzzah'));
//start the interactive demo
//with some coloring that works in the bash shell
echo PHP_EOL . "[01;32mIzzum statemachine interactive demo. press ctrl+c to stop it.[0m" . PHP_EOL . PHP_EOL;
//loop the machine
while (true) {
$state = $machine->getCurrentState();
echo "current state: {$state}" . PHP_EOL;
echo "possible transitions from {$state}: " . PHP_EOL;
if ($state->isFinal()) {
//too much good times
echo "[01;35mAhw man...! Try not to drink/smoke as much next time, it's bad for you ;)[0m" . PHP_EOL . PHP_EOL;
exit;
}
foreach ($state->getTransitions() as $transition) {
echo "'" . $transition->getName() . "' aka event '" . $transition->getEvent() . "'" . PHP_EOL;
}
echo PHP_EOL;
//get input from the user
$event = readline("[01;32mEnter an [01;36mevent [01;32mor [01;34mtransition [01;32mname: [0m");
try {
$status = 0;