mirror of
				https://github.com/avatao-content/baseimage-tutorial-framework
				synced 2025-10-30 22:02:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (C) 2018 Avatao.com Innovative Learning Kft.
 | |
| # All Rights Reserved. See LICENSE file for details.
 | |
| 
 | |
| from transitions import State
 | |
| 
 | |
| from tfw.fsm.fsm_base import FSMBase
 | |
| 
 | |
| 
 | |
| class LinearFSM(FSMBase):
 | |
|     # pylint: disable=anomalous-backslash-in-string
 | |
|     """
 | |
|     This is a state machine for challenges with linear progression, consisting of
 | |
|     a number of steps specified in the constructor. It automatically sets up 2
 | |
|     actions (triggers) between states as such:
 | |
|     (0) --  step_1     --> (1) --  step_2     --> (2) --  step_3     --> (3) ...
 | |
|     (0) --  step_next  --> (1) --  step_next  --> (2) --  step_next  --> (3) ...
 | |
|     """
 | |
|     def __init__(self, number_of_steps):
 | |
|         """
 | |
|         :param number_of_steps: how many states this FSM should have
 | |
|         """
 | |
|         self.states = [State(name=str(index)) for index in range(number_of_steps)]
 | |
|         self.transitions = []
 | |
|         for state in self.states[:-1]:
 | |
|             self.transitions.append({
 | |
|                 'trigger': f'step_{int(state.name)+1}',
 | |
|                 'source': state.name,
 | |
|                 'dest': str(int(state.name)+1)
 | |
|             })
 | |
|             self.transitions.append({
 | |
|                 'trigger': 'step_next',
 | |
|                 'source': state.name,
 | |
|                 'dest': str(int(state.name)+1)
 | |
|             })
 | |
|         super(LinearFSM, self).__init__()
 |