init public repo

This commit is contained in:
Lurkars
2019-07-23 19:49:04 +02:00
commit d6a3a59d2d
446 changed files with 185897 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
extends Spatial
class_name BaseInventory
var road_straights = [
roads_factory.BUMP,
roads_factory.BUMP_SMALL,
roads_factory.STRAIGHT,
roads_factory.STRAIGHT_SMALL,
]
var roads_left = [
roads_factory.CURVE_LEFT,
roads_factory.CURVE_LARGE_LEFT,
roads_factory.CURVE_SMALL_LEFT,
roads_factory.SKEW_LEFT,
roads_factory.CURVED_LEFT,
]
var roads_right = [
roads_factory.CURVE_RIGHT,
roads_factory.CURVE_LARGE_RIGHT,
roads_factory.CURVE_SMALL_RIGHT,
roads_factory.SKEW_RIGHT,
roads_factory.CURVED_RIGHT,
]
var roads_up = [
roads_factory.RAMP_UP,
roads_factory.RAMP_CURVED_UP,
roads_factory.RAMP_SMALL_UP,
]
var roads_down = [
roads_factory.RAMP_DOWN,
roads_factory.RAMP_CURVED_DOWN,
roads_factory.RAMP_SMALL_DOWN,
]
var roads_special = [
roads_factory.LOOP,
]
var roads = [ road_straights, roads_left, roads_right, roads_up, roads_down, roads_special ]
var player:Player
var route:Route
var item:Road
var type:int = 0
var index:int = 0
signal item_changed(index, player)
func _ready():
route = gamestate.game.route
func set_player(new_player:Player):
player = new_player
func set_item():
if is_network_master():
if item:
item.free()
item = roads_factory.get_road_instance(roads[type][index])
if player != null:
item.set_color(player.get_player_color())
item.rotate_y(PI/2)
emit_signal("item_changed", roads[type][index], player)
+56
View File
@@ -0,0 +1,56 @@
extends Spatial
var player:Player
const MAX_ROAD_INDEX = 1
var error_rate:float = 0.00
var underspeed_rate:float = 0.00
func _ready():
randomize()
func _physics_process(delta):
if is_network_master() && player != null:
if player.is_out:
if player.is_resetable:
player.reset()
else:
if player.get_road() != null:
var rate = randf()
var road = player.get_road()
var road_index = 0
var speed_constrain = 0.0
while road != null && road_index < MAX_ROAD_INDEX:
for index in range(road.speed_constrains.size()):
var constrain = road.speed_constrains[index]
if constrain.z > 0:
speed_constrain = max(speed_constrain, constrain.z)
elif constrain.z < 0:
speed_constrain = min(speed_constrain, constrain.z)
road = player.route.get_road(road.get_index() + 1)
road_index += 1
var speed = player.current_speed
if speed_constrain < 0:
player.thrust = 1
elif speed_constrain > 0 && speed > speed_constrain:
player.thrust = -1
elif rate > underspeed_rate:
player.thrust = 1
else:
player.thrust = 0
func set_player(path:String):
player = get_node(path)
get_node("inventory").set_player(player)
func set_error_rate(new_error_rate:float):
error_rate = new_error_rate
func set_underspeed_rate(new_underspeed_rate:float):
underspeed_rate = new_underspeed_rate
+22
View File
@@ -0,0 +1,22 @@
extends BaseInventory
var rand:RandomNumberGenerator = RandomNumberGenerator.new()
func _ready():
rand.randomize()
func _on_raceCar_road_entered(road):
if is_network_master():
if player != null:
if player.is_in_group("first"):
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], player.get_index())
func set_player(new_player:Player):
player = new_player
player.race_car.connect("road_entered",self,"_on_raceCar_road_entered")
+49
View File
@@ -0,0 +1,49 @@
extends Spatial
var player:Player
onready var camera:InterpolatedCamera = get_node("camera")
func _physics_process(delta):
if is_network_master() && player != null:
if player.is_out:
camera.set_speed(0.1)
if player.timer.get_time_left() > 0:
get_node("hud/reset").set_text(str(int(player.timer.get_time_left()) + 1))
else:
get_node("hud/reset").set_text(tr("RESET"))
if Input.is_action_pressed("controls_reset"):
if player.reset():
camera.set_speed(10)
get_node("hud/reset").set_text("")
else:
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))
if Input.is_action_pressed("debug_camera_1"):
set_debug_camera(0)
elif Input.is_action_pressed("debug_camera_2"):
set_debug_camera(1)
elif Input.is_action_pressed("debug_camera_3"):
set_debug_camera(2)
elif Input.is_action_pressed("debug_camera_4"):
set_debug_camera(3)
func set_player(path:String):
player = get_node(path)
get_node("inventory").set_player(player)
camera.set_target_path(player.find_node("CameraTarget").get_path())
camera.set_interpolation_enabled(true)
camera.set_speed(10)
func set_debug_camera(idx):
if idx < gamestate.game.players.get_child_count():
camera.set_target_path(gamestate.game.players.get_child(idx).find_node("CameraTarget").get_path())
+62
View File
@@ -0,0 +1,62 @@
extends BaseInventory
var view:Spatial
var preview:Spatial
func _ready():
view = get_node("view")
preview = get_node("preview")
var hud_track = get_node("../hud/inventory/track")
hud_track.get_texture().set_viewport_path_in_scene(str(get_path()) + "/viewport")
connect("item_changed",self,"_on_item_changed")
connect("item_changed",preview,"_on_inventory_item_changed")
func _physics_process(delta):
if is_network_master():
if player != null:
if not player.is_out && player.is_in_group("first"):
get_node("../hud/inventory").show()
if item == null:
set_item()
if preview.item:
preview.item.show()
if Input.is_action_just_pressed("controls_add_road"):
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:
type = roads.size() -1
index = 0
set_item()
if Input.is_action_just_pressed("controls_next_road_type"):
type += 1
if type > roads.size() - 1:
type = 0
index = 0
set_item()
if Input.is_action_just_pressed("controls_prev_road_variant"):
index -= 1
if index < 0:
index = roads[type].size() -1
set_item()
if Input.is_action_just_pressed("controls_next_road_variant"):
index += 1
if index > roads[type].size() - 1:
index = 0
set_item()
else:
get_node("../hud/inventory").hide()
if preview.item:
preview.item.hide()
func _on_item_changed(road_identifier, player):
if is_network_master():
if view.get_child_count() > 0:
view.remove_child(view.get_child(0))
view.add_child(item)
get_node("../hud/inventory/type").set_text(tr(road_identifier))
+32
View File
@@ -0,0 +1,32 @@
extends Spatial
class_name Preview
var player:Player
var item:Road
func _ready():
gamestate.game.route.connect("road_added",self,"_on_route_road_added")
func _on_route_road_added(road):
if is_network_master() && item:
var transform = road.get_global_transform();
var curve = road.get_curve()
transform = transform.translated(curve.get_point_position(curve.get_point_count() -1))
if road.get_end_rotation().length() != 0:
transform.basis = transform.basis.rotated(road.get_end_rotation().normalized(), road.get_end_rotation().length())
item.set_global_transform(transform)
func _on_inventory_item_changed(road_identifier, player):
if is_network_master():
if item:
item.free()
item = roads_factory.get_road_instance(road_identifier)
item.set_preview(true)
if player != null:
item.set_color(player.get_player_color())
add_child(item)
_on_route_road_added(gamestate.game.route.get_last_road())
+230
View File
@@ -0,0 +1,230 @@
extends Node
class_name Player
const MAX_SPEED:float = 0.2
const START_OFFSET = [1.70223, 1.20223, 0.702227, 0.202227 ]
const LANE_OFFSET = [-0.085, 0.085, -0.255, 0.255 ]
export var player_color:Color
var player_name:String
var thrust:int = 0
var current_speed:float = 0.0
export var speed_factor:float = 0.001
export var brake_factor:float = 2.0
export var friction_brake_factor:float = 0.8
onready var race_car = get_node("Path/PathFollow/raceCar")
onready var timer:Timer = get_node("ResetTimer")
onready var path:Path = get_node("Path")
onready var follow:PathFollow = get_node("Path/PathFollow")
onready var route:Route
var lane:int
var start_init:bool = true
var has_next:bool = false
var is_resetable:bool = false
var buffered_curve:Curve3D
var buffered_translate:Vector3 = Vector3(0,0,0)
var buffered_rotation:Vector3 = Vector3(0,0,0)
var last_rotation:Vector3 = Vector3(0,0,0)
var torque_penalty:Vector3
var force_penalty:Vector3
var path_penalty:float
var is_out:bool = false
var position:Vector2
puppet var slave_position:Vector2
func _ready():
route = gamestate.game.route
race_car.road_ray.set_collision_mask_bit(get_index(),1)
path.curve = path.curve.duplicate()
path.curve.set_bake_interval(0.05)
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)
if follow.get_offset() < 0:
follow.set_offset(0)
if has_next && (path.curve.get_point_count() == 0 || follow.get_unit_offset() >= 1.0):
has_next = false
if path.curve.get_point_count() > 0:
path.curve.clear_points()
path.curve.set_bake_interval(0.05)
for i in range(buffered_curve.get_point_count()):
var _pos = buffered_curve.get_point_position(i)
var _in = buffered_curve.get_point_in(i)
var _out = buffered_curve.get_point_out(i)
if buffered_rotation.length() != 0:
_pos = _pos.rotated(buffered_rotation.normalized(), buffered_rotation.length())
_in = _in.rotated(buffered_rotation.normalized(), buffered_rotation.length())
_out = _out.rotated(buffered_rotation.normalized(), buffered_rotation.length())
path.curve.add_point(buffered_translate + _pos, _in, _out)
path.curve.set_point_tilt(i, buffered_curve.get_point_tilt(i))
if not start_init:
follow.set_offset(0.001)
else:
follow.set_offset(START_OFFSET[lane])
start_init = false
if get_road() != null:
var road = get_road()
var penalty_index = road.penalty_index(follow.get_offset(), current_speed)
if penalty_index >= 0:
torque_penalty = road.get_torque_penalty(penalty_index)
force_penalty = road.get_force_penalty(penalty_index)
path_penalty = road.get_path_penalty(penalty_index)
is_out = true
is_resetable = false
timer.start()
check_position()
else:
race_car.get_node("ray").set_enabled(false)
if force_penalty.length() != 0:
race_car.move_and_slide(force_penalty * current_speed + Vector3(0,-0.5,0))
if torque_penalty.length() != 0:
race_car.rotate_object_local(torque_penalty.normalized(), torque_penalty.length() * current_speed)
if path_penalty > 0 && follow.get_offset() > 0.0:
follow.set_offset(follow.get_offset() - 0.01)
path_penalty -= 0.01
current_speed -= 0.0002
if current_speed < 0:
current_speed = 0
else:
position = slave_position
func get_road():
return race_car.road
func _on_raceCar_road_entered(road):
var prev_road = route.get_road(road.get_index()-1)
if prev_road != null:
prev_road.body.set_collision_layer_bit(get_index(),0)
buffered_curve = road.get_lane_curve(lane)
buffered_rotation = last_rotation
if path.curve.get_point_count() > 0:
buffered_translate = Util.curve_get_last_point(path.curve)
if road.get_end_rotation().length() != 0:
last_rotation += road.get_end_rotation()
has_next = true
func get_player_name():
return player_name
func set_player_name(new_name):
player_name = new_name
func get_player_color():
return player_color
func set_player_color(new_color):
player_color = new_color
var material = SpatialMaterial.new()
material.set_albedo(player_color)
race_car.get_node("body").set_surface_material(1,material)
remotesync func set_first(is_first:bool):
if is_first:
add_to_group("first")
else:
remove_from_group("first")
master func check_position():
position = Vector2(race_car.road_index, follow.get_offset())
rset("slave_position", position)
master func reset():
if is_resetable:
has_next = false
current_speed = 0
var road = race_car.road
road.body.set_collision_layer_bit(get_index(),1)
while road.reset_index != 0:
road = route.get_road(road.get_index() - road.reset_index)
road.body.set_collision_layer_bit(get_index(),1)
path.curve.clear_points()
force_penalty = Vector3(0,0,0)
torque_penalty = Vector3(0,0,0)
buffered_translate = road.get_translation()
last_rotation = road.get_rotation()
race_car.road_index = road.get_index()
race_car.road = null
race_car.collider = null
race_car.transform = Transform()
race_car.get_node("ray").set_enabled(true)
follow.set_transform(road.get_transform())
is_out = false
is_resetable = false
return true
else:
return false
func set_start(new_lane:int):
lane = new_lane
follow.set_h_offset(LANE_OFFSET[lane])
func _on_ResetTimer_timeout():
is_resetable = true
+29
View File
@@ -0,0 +1,29 @@
extends Spatial
var road_ray:RayCast
var collider
var road:Road
var road_index:int = 0
puppet var slave_transform:Transform
signal road_entered(road)
func _ready():
road_ray = get_node("ray")
func _physics_process(delta):
if is_network_master():
if road_ray.is_colliding():
if road_ray.get_collider() != collider:
var parent = road_ray.get_collider().get_parent()
if parent is Road && (road == null && road_index == parent.get_index() || road.get_index() == parent.get_index() - 1) && !parent.is_preview():
collider = road_ray.get_collider()
road = parent
road_index = road.get_index()
emit_signal("road_entered",road)
rset_unreliable("slave_transform", get_global_transform())
else:
set_global_transform(slave_transform)