34 lines
		
	
	
		
			838 B
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			838 B
		
	
	
	
		
			GDScript
		
	
	
	
	
	
| extends Node2D
 | |
| class_name LightSemaphore
 | |
| 
 | |
| @export var synchronizedSemaphore : LightSemaphore = null
 | |
| @export var hasOwnTimerEnabled = true
 | |
| @onready var lights := [$Sempahore/green, $Sempahore/yellow, $Sempahore/red ];
 | |
| @export var waitTicks := [5, 1, 6];
 | |
| @export var light = 0;
 | |
| var tickCounter = 0
 | |
| 
 | |
| func _ready() -> void:
 | |
| 	$brakeZone.get_child(1).disabled = !light;
 | |
| 	for i in range (lights.size()):
 | |
| 		lights[i].visible = i == light
 | |
| 	$Timer.wait_time = 1;
 | |
| 
 | |
| func tick():
 | |
| 	tickCounter+=1
 | |
| 	if tickCounter == waitTicks[light]:
 | |
| 		light += 1;
 | |
| 		if light > 2:
 | |
| 			light = 0;
 | |
| 		tickCounter = 0;
 | |
| 	$brakeZone.get_child(1).disabled = !light;
 | |
| 	for i in range (lights.size()):
 | |
| 		lights[i].visible = i == light
 | |
| 	if synchronizedSemaphore:
 | |
| 		synchronizedSemaphore.tick();
 | |
| 
 | |
| func _on_timer_timeout() -> void:
 | |
| 	if hasOwnTimerEnabled:
 | |
| 		$Timer.start()
 | |
| 		tick();
 | 
