diff --git a/resources/ui/i18n.de.translation b/resources/ui/i18n.de.translation index 9456630..fc9d2e7 100644 Binary files a/resources/ui/i18n.de.translation and b/resources/ui/i18n.de.translation differ diff --git a/resources/ui/i18n.en.translation b/resources/ui/i18n.en.translation index 9c4c5d2..4835726 100644 Binary files a/resources/ui/i18n.en.translation and b/resources/ui/i18n.en.translation differ diff --git a/scripts/player/bot_controls.gd b/scripts/player/bot_controls.gd index 772a709..3f82b46 100644 --- a/scripts/player/bot_controls.gd +++ b/scripts/player/bot_controls.gd @@ -3,7 +3,7 @@ extends Spatial var player:Player var overspeed_rate:float = 0.8 -var underspeed_rate:float = 0.8 +var underspeed_rate:float = 0.3 func _ready(): @@ -27,16 +27,18 @@ func _physics_process(delta): if constrain.x <= distance && constrain.y >= distance: has_constrain = true if constrain.z > 0 && speed < constrain.z && rate > underspeed_rate: - player.current_speed += player.speed_factor - elif player.current_speed > 0 && rate > overspeed_rate: - player.current_speed -= player.speed_factor * player.friction_brake_factor + player.thrust = 1 + elif rate > overspeed_rate: + player.thrust = -1 + else: + player.thrust = 0 if not has_constrain: - if player.current_speed <= player.MAX_SPEED && rate > underspeed_rate: - player.current_speed += player.speed_factor - elif player.current_speed > 0 && rate > overspeed_rate: - player.current_speed -= player.speed_factor * player.friction_brake_factor - if player.current_speed < 0: - player.current_speed = 0 + if rate > underspeed_rate: + player.thrust = 1 + elif rate > overspeed_rate: + player.thrust = -1 + else: + player.thrust = 0 func set_player(path:String): diff --git a/scripts/player/bot_inventory.gd b/scripts/player/bot_inventory.gd index 546c307..22958b9 100644 --- a/scripts/player/bot_inventory.gd +++ b/scripts/player/bot_inventory.gd @@ -14,7 +14,7 @@ func _on_raceCar_road_entered(road): if route.get_last_road().get_index() <= (road.get_index() +2): type = rand.randi_range(0,roads.size() -2) # TODO: remove special, loop need fixes! index = rand.randi_range(0, roads[type].size() -1) - route.rpc("add_road", roads[type][index], -1) + route.rpc("add_road", roads[type][index], player.get_index()) func set_player(new_player:Player): diff --git a/scripts/player/human_controls.gd b/scripts/player/human_controls.gd index f5d4cb8..92b7686 100644 --- a/scripts/player/human_controls.gd +++ b/scripts/player/human_controls.gd @@ -17,14 +17,12 @@ func _physics_process(delta): camera.set_speed(10) get_node("hud/reset").set_text("") else: - if Input.is_action_pressed("controls_thrust") && player.current_speed <= player.MAX_SPEED: - player.current_speed += player.speed_factor - elif Input.is_action_pressed("controls_break") && player.current_speed <= player.MAX_SPEED: - player.current_speed -= player.speed_factor * player.brake_factor - elif player.current_speed > 0: - player.current_speed -= player.speed_factor * player.friction_brake_factor - elif player.current_speed < 0: - player.current_speed = 0 + if Input.is_action_pressed("controls_thrust"): + player.thrust = 1 + elif Input.is_action_pressed("controls_break"): + player.thrust = -1 + else: + player.thrust = 0 get_node("hud/speed").set_text(str(player.current_speed)) diff --git a/scripts/player/human_inventory.gd b/scripts/player/human_inventory.gd index ce3128a..e205f13 100644 --- a/scripts/player/human_inventory.gd +++ b/scripts/player/human_inventory.gd @@ -22,7 +22,7 @@ func _physics_process(delta): if preview.item: preview.item.show() if Input.is_action_just_pressed("controls_add_road"): - route.rpc("add_road", roads[type][index], get_tree().get_network_unique_id()) + route.rpc("add_road", roads[type][index], player.get_index()) if Input.is_action_just_pressed("controls_prev_road_type"): type -= 1 if type < 0: diff --git a/scripts/player/player.gd b/scripts/player/player.gd index eba1899..f23972b 100644 --- a/scripts/player/player.gd +++ b/scripts/player/player.gd @@ -2,8 +2,11 @@ extends BasePlayer class_name Player -var MAX_SPEED:float = 0.2 +const MAX_SPEED:float = 0.2 +const LANE_OFFSET = [-0.085, 0.085, -0.255, 0.255 ] + +var thrust:int = 0 var current_speed:float = 0.0 export var speed_factor:float = 0.001 @@ -25,7 +28,6 @@ var last_rotation:Vector3 = Vector3(0,0,0) var torque_penalty:Vector3 var force_penalty:Vector3 -const LANE_OFFSET = [-0.085, 0.085, -0.255, 0.255 ] func _ready(): @@ -39,6 +41,29 @@ func _ready(): func _physics_process(delta): if is_network_master(): if not is_out: + var max_speed = MAX_SPEED + + if get_road() != null: + var road = get_road() + if is_in_group("first"): + max_speed *= road.get_first_speed_factor() + if road.get_creator() == get_index(): + max_speed *= road.get_creator_speed_factor() + else: + max_speed *= road.get_chasers_speed_factor() + + + if thrust == 1: + current_speed += speed_factor + elif thrust == -1: + current_speed -= speed_factor * brake_factor + else: + current_speed -= speed_factor * friction_brake_factor + + if current_speed >= max_speed: + current_speed = max_speed + elif current_speed < 0: + current_speed = 0 follow.set_offset(follow.get_offset() + current_speed) diff --git a/scripts/road/road.gd b/scripts/road/road.gd index 5995b33..e761e13 100644 --- a/scripts/road/road.gd +++ b/scripts/road/road.gd @@ -4,8 +4,8 @@ class_name Road export var end_rotation:Vector3 = Vector3(0,0,0) -export var first_speed_factor:float = 1.0 -export var creator_speed_factor:float = 1.0 +export var first_speed_factor:float = 0.8 +export var creator_speed_factor:float = 0.8 export var chasers_speed_factor:float = 1.0 export var reset_index:int = 0 @@ -14,7 +14,7 @@ export (PoolVector3Array) var speed_constrains = PoolVector3Array() export (PoolVector3Array) var force_penalties = PoolVector3Array() export (PoolVector3Array) var torque_penalties = PoolVector3Array() -var creator:String = "" +var creator:int = -1 var preview:bool = false @@ -34,7 +34,7 @@ func get_creator(): func set_creator(new_creator): - creator = str(new_creator) + creator = int(new_creator) func set_color(new_color): @@ -105,4 +105,16 @@ func get_force_penalty(index:int): else: return force_penalties[index] - return Vector3(0,0,0) \ No newline at end of file + return Vector3(0,0,0) + + +func get_first_speed_factor(): + return first_speed_factor + + +func get_creator_speed_factor(): + return creator_speed_factor + + +func get_chasers_speed_factor(): + return chasers_speed_factor \ No newline at end of file