init public repo
This commit is contained in:
@@ -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)
|
||||
@@ -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
|
||||
@@ -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")
|
||||
@@ -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())
|
||||
@@ -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))
|
||||
@@ -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())
|
||||
@@ -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
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user