add car timeout
This commit is contained in:
parent
23a2e784a9
commit
b25f433914
4 changed files with 44 additions and 21 deletions
|
@ -239,8 +239,10 @@ stream = SubResource("AudioStreamRandomizer_evs7n")
|
||||||
bus = &"Crash"
|
bus = &"Crash"
|
||||||
|
|
||||||
[node name="NoInputTimer" type="Timer" parent="CharacterBody_Car"]
|
[node name="NoInputTimer" type="Timer" parent="CharacterBody_Car"]
|
||||||
wait_time = 10.0
|
wait_time = 15.0
|
||||||
one_shot = true
|
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/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/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"]
|
||||||
|
|
|
@ -83,6 +83,7 @@ var autoreset=false
|
||||||
|
|
||||||
var autosteer_enabled=false
|
var autosteer_enabled=false
|
||||||
|
|
||||||
|
var no_input_timeout_flag=false
|
||||||
|
|
||||||
var burnout:float=0 #at 0 is off
|
var burnout:float=0 #at 0 is off
|
||||||
|
|
||||||
|
@ -129,7 +130,7 @@ func _physics_process(delta: float) -> void:
|
||||||
$Burnout_Left.emitting=false
|
$Burnout_Left.emitting=false
|
||||||
$Burnout_Right.emitting=false
|
$Burnout_Right.emitting=false
|
||||||
|
|
||||||
#update_timeout_visibility()
|
update_timeout_visibility()
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
|
||||||
for i in get_slide_collision_count():
|
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 velocity.length() < resetcar_stoppedspeed and autosteer_enabled: #moving slow, possibly crash?
|
||||||
if reset_timer.is_stopped():
|
if reset_timer.is_stopped():
|
||||||
reset_timer.start()
|
reset_timer.start()
|
||||||
if no_input_timer.is_stopped():
|
|
||||||
no_input_timer.start()
|
|
||||||
|
|
||||||
if velocity.length() > resetcar_movingspeed:
|
if velocity.length() > resetcar_movingspeed:
|
||||||
reset_timer.stop()
|
reset_timer.stop()
|
||||||
no_input_timer.stop()
|
|
||||||
|
|
||||||
if running:
|
if running:
|
||||||
enginesound.setCarSpeed(velocity.length())
|
enginesound.setCarSpeed(velocity.length())
|
||||||
|
@ -175,17 +173,17 @@ func _on_reset_timer_timeout() -> void:
|
||||||
autoreset=true
|
autoreset=true
|
||||||
|
|
||||||
func update_timeout_visibility():
|
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_body.modulate.a=fadeout
|
||||||
$sprite_features.modulate.a=fadeout
|
$sprite_features.modulate.a=fadeout
|
||||||
$sprite_steeringwheel.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():
|
func apply_friction():
|
||||||
if velocity.length() < STANDSTILLSPEED: #standstill
|
if velocity.length() < STANDSTILLSPEED: #standstill
|
||||||
velocity=Vector2.ZERO
|
velocity=Vector2.ZERO
|
||||||
|
@ -250,7 +248,16 @@ func get_input(delta:float):
|
||||||
applied_engine_power=0
|
applied_engine_power=0
|
||||||
|
|
||||||
var key_accelerator_pressed=Input.is_action_pressed(Gamestate.userinput_prefix+str(playerid))
|
var key_accelerator_pressed=Input.is_action_pressed(Gamestate.userinput_prefix+str(playerid))
|
||||||
|
|
||||||
|
#check Input Timeout
|
||||||
if key_accelerator_pressed:
|
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:
|
if running:
|
||||||
#velocity = transform.x * 500
|
#velocity = transform.x * 500
|
||||||
applied_engine_power=engine_power
|
applied_engine_power=engine_power
|
||||||
|
@ -285,8 +292,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
|
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
|
$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):
|
func calculate_steering(delta:float):
|
||||||
var rear_wheel = position - transform.x *wheel_base/2.0
|
var rear_wheel = position - transform.x *wheel_base/2.0
|
||||||
var front_wheel = position + transform.x *wheel_base/2.0
|
var front_wheel = position + transform.x *wheel_base/2.0
|
||||||
|
@ -337,6 +342,7 @@ func check_markers():
|
||||||
running=false
|
running=false
|
||||||
finalTime=Gamestate.getTimeElapsed()
|
finalTime=Gamestate.getTimeElapsed()
|
||||||
car_finished.emit(playerid,finalTime)
|
car_finished.emit(playerid,finalTime)
|
||||||
|
no_input_timer.stop() #avoid removing player after finished
|
||||||
|
|
||||||
elif rcc_collidername.begins_with("area_cp"):
|
elif rcc_collidername.begins_with("area_cp"):
|
||||||
var nextcp_i=getNextCPindex()
|
var nextcp_i=getNextCPindex()
|
||||||
|
@ -366,3 +372,8 @@ func getNextCPindex():
|
||||||
|
|
||||||
func _on_collision_enable_timer_timeout() -> void:
|
func _on_collision_enable_timer_timeout() -> void:
|
||||||
collision_shape.disabled=false
|
collision_shape.disabled=false
|
||||||
|
|
||||||
|
|
||||||
|
func _on_no_input_timer_timeout() -> void:
|
||||||
|
no_input_timeout_flag=true
|
||||||
|
running=false
|
||||||
|
|
|
@ -44,3 +44,6 @@ func getCharacterBody():
|
||||||
|
|
||||||
func hasFinished():
|
func hasFinished():
|
||||||
return cbcar.finalTime!=-1
|
return cbcar.finalTime!=-1
|
||||||
|
|
||||||
|
func getNoInputTimeout():
|
||||||
|
return cbcar.no_input_timeout_flag
|
||||||
|
|
|
@ -102,6 +102,7 @@ func _process(delta: float) -> void:
|
||||||
#if !countdown.is_stopped():
|
#if !countdown.is_stopped():
|
||||||
# countdown_label.text=str(round(countdown.time_left))
|
# countdown_label.text=str(round(countdown.time_left))
|
||||||
|
|
||||||
|
checkCarsTimeout(delta)
|
||||||
updateCameraMovement(delta)
|
updateCameraMovement(delta)
|
||||||
|
|
||||||
#$hud/debuglabel.text=""+str(calculatedViewCarMargin)+" / "+str(viewCarMargin_zoomstart)+" zoomspeed="+str(mapped_zoomspeed)
|
#$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
|
timer_close.start() #start timer when no key is pressed
|
||||||
|
|
||||||
func checkCarsTimeout(delta: float):
|
func checkCarsTimeout(delta: float):
|
||||||
|
# Remove cars from game if they are not participating
|
||||||
var cars=cars.get_children()
|
var cars=cars.get_children()
|
||||||
for c in cars: #check if any one car is still driving
|
for c in cars: #check if any one car is still driving
|
||||||
if !c.hasFinished() and c.getNoInputTimeout():
|
if !c.hasFinished() and c.getNoInputTimeout():
|
||||||
print("Removing car")
|
print("Removing car")
|
||||||
|
c.queue_free()
|
||||||
|
if cars.size()<=0 and !game_ended: #no cars left
|
||||||
|
end_game()
|
||||||
|
|
||||||
func updateCameraMovement(delta: float):
|
func updateCameraMovement(delta: float):
|
||||||
|
|
||||||
|
@ -225,7 +230,8 @@ func _on_countdown_timeout() -> void:
|
||||||
func _on_car_finished(playerid,finalTime) -> void:
|
func _on_car_finished(playerid,finalTime) -> void:
|
||||||
times_container.addFinishedPlayer(playerid,finalTime,Gamestate.getPlayers().size())
|
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
|
finishGame()# Game finished
|
||||||
|
|
||||||
func _on_car_on_checkpoint(playerid,checkpointtimes,i) -> void:
|
func _on_car_on_checkpoint(playerid,checkpointtimes,i) -> void:
|
||||||
|
@ -252,9 +258,7 @@ func _on_car_on_checkpoint(playerid,checkpointtimes,i) -> void:
|
||||||
|
|
||||||
func finishGame():
|
func finishGame():
|
||||||
print("Game Finished")
|
print("Game Finished")
|
||||||
running=false
|
end_game()
|
||||||
game_ended=true
|
|
||||||
|
|
||||||
#change rank for players
|
#change rank for players
|
||||||
|
|
||||||
var players_ranked :Array = Gamestate.getPlayers().duplicate()
|
var players_ranked :Array = Gamestate.getPlayers().duplicate()
|
||||||
|
@ -288,10 +292,13 @@ func finishGame():
|
||||||
highscore_label.modulate=Color(200,0,0)
|
highscore_label.modulate=Color(200,0,0)
|
||||||
|
|
||||||
|
|
||||||
game_hud_animations.play("game_end")
|
|
||||||
timer_close.start()
|
|
||||||
#overlaycolor.visible=true
|
#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):
|
func custom_array_sort_player_finaltime(a, b):
|
||||||
#var cars=cars.get_children()
|
#var cars=cars.get_children()
|
||||||
|
|
Loading…
Add table
Reference in a new issue