From b25f433914be2898174d1784cfbb1ac7bf8403c6 Mon Sep 17 00:00:00 2001 From: Fisch Date: Sat, 22 Mar 2025 15:53:00 +0100 Subject: [PATCH] add car timeout --- scenes/car.tscn | 4 +++- scripts/car.gd | 39 +++++++++++++++++++++++++-------------- scripts/car_node.gd | 3 +++ scripts/game.gd | 19 +++++++++++++------ 4 files changed, 44 insertions(+), 21 deletions(-) diff --git a/scenes/car.tscn b/scenes/car.tscn index f9bc0d8..5753113 100644 --- a/scenes/car.tscn +++ b/scenes/car.tscn @@ -239,8 +239,10 @@ stream = SubResource("AudioStreamRandomizer_evs7n") bus = &"Crash" [node name="NoInputTimer" type="Timer" parent="CharacterBody_Car"] -wait_time = 10.0 +wait_time = 15.0 one_shot = true +autostart = true [connection signal="timeout" from="CharacterBody_Car/resetTimer" to="CharacterBody_Car" method="_on_reset_timer_timeout"] [connection signal="timeout" from="CharacterBody_Car/collisionEnableTimer" to="CharacterBody_Car" method="_on_collision_enable_timer_timeout"] +[connection signal="timeout" from="CharacterBody_Car/NoInputTimer" to="CharacterBody_Car" method="_on_no_input_timer_timeout"] diff --git a/scripts/car.gd b/scripts/car.gd index 78cdeca..41aa991 100644 --- a/scripts/car.gd +++ b/scripts/car.gd @@ -83,6 +83,7 @@ var autoreset=false var autosteer_enabled=false +var no_input_timeout_flag=false var burnout:float=0 #at 0 is off @@ -129,7 +130,7 @@ func _physics_process(delta: float) -> void: $Burnout_Left.emitting=false $Burnout_Right.emitting=false - #update_timeout_visibility() + update_timeout_visibility() move_and_slide() for i in get_slide_collision_count(): @@ -155,12 +156,9 @@ func _physics_process(delta: float) -> void: if velocity.length() < resetcar_stoppedspeed and autosteer_enabled: #moving slow, possibly crash? if reset_timer.is_stopped(): reset_timer.start() - if no_input_timer.is_stopped(): - no_input_timer.start() if velocity.length() > resetcar_movingspeed: reset_timer.stop() - no_input_timer.stop() if running: enginesound.setCarSpeed(velocity.length()) @@ -175,17 +173,17 @@ func _on_reset_timer_timeout() -> void: autoreset=true func update_timeout_visibility(): - var fadeout=1-constrain((3-no_input_timer.time_left)/3.0,0.0,1.0) #1= full visible, 0=timeouted + var no_input_timer_time_left=no_input_timer.time_left + if (no_input_timer.is_stopped()): + no_input_timer_time_left=no_input_timer.wait_time + if no_input_timeout_flag: + no_input_timer_time_left=0 #car already disappeared + var fadeout=1-constrain((3-no_input_timer_time_left)/3.0,0.0,1.0) #1= full visible, 0=timeouted + $sprite_body.modulate.a=fadeout $sprite_features.modulate.a=fadeout $sprite_steeringwheel.modulate.a=fadeout - -func getNoInputTimeout(): - if no_input_timer.time_left<=0: - return true - else: - return false - + func apply_friction(): if velocity.length() < STANDSTILLSPEED: #standstill velocity=Vector2.ZERO @@ -250,7 +248,16 @@ func get_input(delta:float): applied_engine_power=0 var key_accelerator_pressed=Input.is_action_pressed(Gamestate.userinput_prefix+str(playerid)) + + #check Input Timeout + if key_accelerator_pressed: + no_input_timer.stop() + else: + if no_input_timer.is_stopped() and !no_input_timeout_flag: #reset timer + no_input_timer.start() + if key_accelerator_pressed: + if running: #velocity = transform.x * 500 applied_engine_power=engine_power @@ -284,8 +291,6 @@ func get_input(delta:float): steer_direction+=constrain(steer_direction_aim-steer_direction,max_steering_change*delta,-max_steering_change*delta) #smooth steering. towards steer_direction_aim $sprite_steeringwheel.rotation=steer_direction - - print("steer_direction="+str(steer_direction)+" \t resetcar_steerangle="+str(resetcar_steerangle)+" \t steer_direction_aim="+str(steer_direction_aim)) func calculate_steering(delta:float): var rear_wheel = position - transform.x *wheel_base/2.0 @@ -337,6 +342,7 @@ func check_markers(): running=false finalTime=Gamestate.getTimeElapsed() car_finished.emit(playerid,finalTime) + no_input_timer.stop() #avoid removing player after finished elif rcc_collidername.begins_with("area_cp"): var nextcp_i=getNextCPindex() @@ -366,3 +372,8 @@ func getNextCPindex(): func _on_collision_enable_timer_timeout() -> void: collision_shape.disabled=false + + +func _on_no_input_timer_timeout() -> void: + no_input_timeout_flag=true + running=false diff --git a/scripts/car_node.gd b/scripts/car_node.gd index e312427..be6852d 100644 --- a/scripts/car_node.gd +++ b/scripts/car_node.gd @@ -44,3 +44,6 @@ func getCharacterBody(): func hasFinished(): return cbcar.finalTime!=-1 + +func getNoInputTimeout(): + return cbcar.no_input_timeout_flag diff --git a/scripts/game.gd b/scripts/game.gd index 394799c..b7f8eb7 100644 --- a/scripts/game.gd +++ b/scripts/game.gd @@ -102,6 +102,7 @@ func _process(delta: float) -> void: #if !countdown.is_stopped(): # countdown_label.text=str(round(countdown.time_left)) + checkCarsTimeout(delta) updateCameraMovement(delta) #$hud/debuglabel.text=""+str(calculatedViewCarMargin)+" / "+str(viewCarMargin_zoomstart)+" zoomspeed="+str(mapped_zoomspeed) @@ -126,10 +127,14 @@ func _process(delta: float) -> void: timer_close.start() #start timer when no key is pressed func checkCarsTimeout(delta: float): + # Remove cars from game if they are not participating var cars=cars.get_children() for c in cars: #check if any one car is still driving if !c.hasFinished() and c.getNoInputTimeout(): print("Removing car") + c.queue_free() + if cars.size()<=0 and !game_ended: #no cars left + end_game() func updateCameraMovement(delta: float): @@ -225,7 +230,8 @@ func _on_countdown_timeout() -> void: func _on_car_finished(playerid,finalTime) -> void: times_container.addFinishedPlayer(playerid,finalTime,Gamestate.getPlayers().size()) - if times_container.getPlayersFinished() == Gamestate.getPlayers().size(): #all players have finish times + #if times_container.getPlayersFinished() == Gamestate.getPlayers().size(): #all players have finish times + if times_container.getPlayersFinished() == cars.get_children().size(): #all players still in game have finish times finishGame()# Game finished func _on_car_on_checkpoint(playerid,checkpointtimes,i) -> void: @@ -252,9 +258,7 @@ func _on_car_on_checkpoint(playerid,checkpointtimes,i) -> void: func finishGame(): print("Game Finished") - running=false - game_ended=true - + end_game() #change rank for players var players_ranked :Array = Gamestate.getPlayers().duplicate() @@ -288,10 +292,13 @@ func finishGame(): highscore_label.modulate=Color(200,0,0) - game_hud_animations.play("game_end") - timer_close.start() #overlaycolor.visible=true +func end_game(): + running=false + game_ended=true + game_hud_animations.play("game_end") + timer_close.start() func custom_array_sort_player_finaltime(a, b): #var cars=cars.get_children()