summaryrefslogtreecommitdiff
path: root/godot/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'godot/scripts')
-rw-r--r--godot/scripts/GameBase.gd2
-rw-r--r--godot/scripts/World.gd37
-rw-r--r--godot/scripts/ballistics/Cannonball.gd2
-rw-r--r--godot/scripts/cameras/PlayerCamGDS.gd79
-rw-r--r--godot/scripts/cameras/plane_armcam.gd6
-rw-r--r--godot/scripts/cameras/player_firstperson.gd33
-rw-r--r--godot/scripts/characters/player_controller_new.gd67
-rw-r--r--godot/scripts/machines/Cannon.gd10
-rw-r--r--godot/scripts/machines/NetworkedMachineGDS.gd7
-rw-r--r--godot/scripts/vehicles/Airplane.gd109
-rw-r--r--godot/scripts/vehicles/Gunboat.gd7
11 files changed, 227 insertions, 132 deletions
diff --git a/godot/scripts/GameBase.gd b/godot/scripts/GameBase.gd
index 0df53dd..be430d4 100644
--- a/godot/scripts/GameBase.gd
+++ b/godot/scripts/GameBase.gd
@@ -8,6 +8,7 @@ var local_server_tree = null
var player_name : String
var player_team : String
var player_char = null
+onready var cam = $PLAYERCAM
var players_info = {} #dictionary of id : name, team, ping, etc.
@@ -28,6 +29,7 @@ remote func set_up_server_info(info):
$HUD/ServerJoinMenu/MOTD.text = info["MOTD"]
$HUD/ServerJoinMenu/ServerName.text = info["server_name"]
$DEFAULTCAM.transform = info["cam_pos"]
+ cam.attach($DEFAULTCAM, "STATIC")
rpc_id(1, "_call_on_server", "_client_connection_confirmed", {"id" : client_id, "username" : player_name})
diff --git a/godot/scripts/World.gd b/godot/scripts/World.gd
index fa5a306..7e60423 100644
--- a/godot/scripts/World.gd
+++ b/godot/scripts/World.gd
@@ -5,19 +5,25 @@ var m = SpatialMaterial.new()
var winddir = Vector3(1,0,0)
onready var pathfinder = get_node("PLAYERS/Player2")
var path = []
-var map_rid
+var map_rids
var client_id
var player_char
var players_info = {}
+var WORLD_MAP_RID : RID
# Called when the node enters the scene tree for the first time.
func _ready():
- map_rid = NavigationServer.get_maps()
- for rid in map_rid:
- NavigationServer.map_set_edge_connection_margin(rid,1)
+ map_rids = NavigationServer.get_maps()
+ for rid in map_rids:
+ NavigationServer.map_set_edge_connection_margin(rid,1.5)
m.flags_unshaded = true
m.flags_use_point_size = true
m.albedo_color = Color.white
+
+ #merge all nav meshes onto the main map
+ yield(get_tree().create_timer(1.0), "timeout")
+ WORLD_MAP_RID = get_world().get_navigation_map()
+ find_path()
remotesync func update_players_info(info):
players_info = info
@@ -26,13 +32,22 @@ remote func _call_on_server(function, arguments):
print('Remote server call: ' + function)
$Server.call(function, arguments)
-func find_path(to):
- pathfinder.nav.set_target_location(to)
- var t_path = pathfinder.nav.get_next_location()
- pathfinder.should_move = true
- t_path = pathfinder.nav.get_nav_path()
- print(to)
- print(t_path)
+func find_path():
+ var start_pos = $START.global_transform.origin
+ var end_pos = $END.global_transform.origin
+ var t_path = NavigationServer.map_get_path(WORLD_MAP_RID, start_pos, end_pos, true)
+ var path_end = t_path[len(t_path)-1]
+ #is path end near desired end
+ #if not, is the end point in an unreachable region?
+ for rid in map_rids:
+ print("map " + str(rid.get_id()))
+ for region_rid in NavigationServer.map_get_regions(rid):
+ print("region " + str(region_rid.get_id()))
+ if NavigationServer.region_owns_point(region_rid, end_pos):
+ print("owns target point")
+ if NavigationServer.region_owns_point(region_rid, path_end):
+ print("owns end point")
+ print( (end_pos - t_path[len(t_path)-1]).length() )
draw_path(t_path)
pass
diff --git a/godot/scripts/ballistics/Cannonball.gd b/godot/scripts/ballistics/Cannonball.gd
index 14de00c..d1937f4 100644
--- a/godot/scripts/ballistics/Cannonball.gd
+++ b/godot/scripts/ballistics/Cannonball.gd
@@ -13,5 +13,5 @@ func get_init_info():
func _on_collision(body):
if oldvel.length() > 20 and !damage_exceptions.has(body) and body.has_method("damage"):
- body.rpc("damage", oldvel.length(), "blunt", shooter, "using 'cannon'")
+ body.rpc("damage", oldvel.length(), "blunt", [shooter_id, shooter], "using 'cannon'")
damage_exceptions.append(body)
diff --git a/godot/scripts/cameras/PlayerCamGDS.gd b/godot/scripts/cameras/PlayerCamGDS.gd
new file mode 100644
index 0000000..ec46cf8
--- /dev/null
+++ b/godot/scripts/cameras/PlayerCamGDS.gd
@@ -0,0 +1,79 @@
+extends ClippedCamera
+
+var _modes = ["STATIC", "FIRSTPERSON", "THIRDPERSON", "ARM", "FREECAM"]
+var mode = "STATIC" #STATIC, FIRSTPERSON, THIRDPERSON, ARM, FREECAM
+
+#first/third person variables
+var head : Spatial = null
+var neck : Spatial = null
+var player : RigidBody = null
+
+#third person/arm variables
+var arm : SpringArm = null
+
+var mouse_axis := Vector2()
+var mouse_sensitivity = 12.0
+
+func _ready():
+ Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
+ current = true
+
+func _input(event):
+ if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
+ mouse_axis = event.relative
+ match mode:
+ "FIRSTPERSON":
+ mouse_firstperson()
+ "THIRDPERSON":
+ mouse_thirdperson()
+ "STATIC":
+ pass
+ "ARM":
+ mouse_arm()
+ "FREECAM":
+ mouse_freecam()
+ _:
+ pass
+
+func attach(new_parent: Node, c_mode, extra_path = "."):
+ if get_parent():
+ get_parent().remove_child(self)
+ if c_mode in _modes:
+ mode = c_mode
+ if mode == "FIRSTPERSON":
+ head = new_parent.head; neck = new_parent.neck;
+ arm = null;
+ elif mode == "THIRDPERSON":
+ head = new_parent.head; neck = new_parent.neck;
+ arm = new_parent.arm
+ elif mode == "ARM":
+ head = null; neck = null;
+ arm = new_parent.arm
+ else:
+ head = null; neck = null; arm = null;
+ new_parent.get_node(extra_path).add_child(self)
+ transform = Transform.IDENTITY
+
+func mouse_firstperson() -> void:
+ if mouse_axis.length_squared() > 0:
+ var horizontal: float = -mouse_axis.x * (mouse_sensitivity / 100)
+ var vertical: float = -mouse_axis.y * (mouse_sensitivity / 100)
+
+ neck.rotate_y(deg2rad(horizontal))
+ head.rotate_x(deg2rad(vertical))
+
+ #vertical clamp
+ head.rotation_degrees.x = clamp(head.rotation_degrees.x, -90, 90)
+
+func mouse_thirdperson() -> void:
+ arm.rotation_degrees.x = clamp(rotation_degrees.x-mouse_axis.y*(mouse_sensitivity / 100),-90,90)
+ arm.rotation_degrees.y -= mouse_axis.x*(mouse_sensitivity / 100)
+ head.rotation_degrees.x = arm.rotation_degrees.x
+ neck.rotation_degrees.y = arm.rotation_degrees.y
+
+func mouse_arm() -> void:
+ arm.rotation_degrees.x = clamp(rotation_degrees.x-mouse_axis.y*(mouse_sensitivity / 100),-70,70)
+ arm.rotation_degrees.y -= mouse_axis.x*(mouse_sensitivity / 100)
+
+func mouse_freecam() -> void:
+ pass
diff --git a/godot/scripts/cameras/plane_armcam.gd b/godot/scripts/cameras/plane_armcam.gd
index edb0284..68b4852 100644
--- a/godot/scripts/cameras/plane_armcam.gd
+++ b/godot/scripts/cameras/plane_armcam.gd
@@ -14,12 +14,6 @@ func _ready():
func _input(event):
if $ClippedCamera.current:
- if Input.is_action_just_pressed("menu"): #toggle mouse capture on esc
- if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE:
- Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
- else:
- Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
-
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
if event is InputEventMouseMotion:
rotation_degrees.x = clamp(rotation_degrees.x-event.relative.y*0.1,-70,70)
diff --git a/godot/scripts/cameras/player_firstperson.gd b/godot/scripts/cameras/player_firstperson.gd
deleted file mode 100644
index ace49e6..0000000
--- a/godot/scripts/cameras/player_firstperson.gd
+++ /dev/null
@@ -1,33 +0,0 @@
-extends Camera
-
-
-var mouse_axis := Vector2()
-var mouse_sensitivity = 12.0
-
-func _ready():
- Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
- current = false
-
-
-func _input(event):
- if current:
- if Input.is_action_just_pressed("menu"): #toggle mouse capture on esc
- if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE:
- Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
- else:
- Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
- if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
- mouse_axis = event.relative
- if mouse_axis.length() > 0:
- var horizontal: float = -mouse_axis.x * (mouse_sensitivity / 100)
- var vertical: float = -mouse_axis.y * (mouse_sensitivity / 100)
-
- mouse_axis = Vector2()
-
- get_parent().rotate_y(deg2rad(horizontal))
- rotate_x(deg2rad(vertical))
-
- var temp_rot: Vector3 = rotation_degrees
- temp_rot.x = clamp(temp_rot.x, -90, 90)
- get_parent().animationcontroller.rpc("lean",-1*temp_rot.x/90)
- rotation_degrees = temp_rot
diff --git a/godot/scripts/characters/player_controller_new.gd b/godot/scripts/characters/player_controller_new.gd
index 6df88f0..deaea79 100644
--- a/godot/scripts/characters/player_controller_new.gd
+++ b/godot/scripts/characters/player_controller_new.gd
@@ -10,8 +10,8 @@ var world
export(float) var mouse_sensitivity = 12.0
export(float) var FOV = 90.0
var mouse_axis := Vector2()
-onready var head: Spatial = $Head
-onready var cam: Camera = $Head/Camera
+onready var head: Spatial = $Neck/Head
+onready var neck: Spatial = $Neck
# Move
var velocity := Vector3()
@@ -38,6 +38,7 @@ var ladder_m = null
#physics
var player_state : PhysicsDirectBodyState
var is_on_floor:bool
+var floor_normal : Vector3 = Vector3.UP
var acceleration = 80.0
export(int) var walk_speed = 5
var c_friction = 4.0
@@ -48,15 +49,11 @@ func _ready() -> void:
weapon = preload("res://scenes/weapons/w_Rockets.tscn").instance()
add_child(weapon)
world = get_tree().get_root().get_node("GAMEWORLD")
- if is_player:
- cam.current = true
- $Head/Camera/UseRay.add_exception(self)
- $Head/Camera/MeleeRay.add_exception(self)
- $Head/Camera/UseRay.add_exception($AreaDetect)
- $Head/Camera/MeleeRay.add_exception($AreaDetect)
- Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
- cam.fov = FOV
+ $"%UseRay".add_exception(self)
+ $"%MeleeRay".add_exception(self)
+ $"%UseRay".add_exception($AreaDetect)
+ $"%MeleeRay".add_exception($AreaDetect)
func get_init_info():
return {"linear_velocity" : linear_velocity, "angular_velocity" : angular_velocity, "controlling_machine" : controlling_machine, "team" : team, "health" : health, "nametag" : $Nametag.text}
@@ -82,6 +79,8 @@ func _process(_delta: float) -> void:
if Input.is_action_just_pressed("fire2"):
machine.attack2()
machine.direction_input(Input.get_action_strength("move_forward"),Input.get_action_strength("move_backward"), Input.get_action_strength("move_right"),Input.get_action_strength("move_left"), Input.get_action_strength("alt_right"),Input.get_action_strength("alt_left"))
+ machine.misc_input(Input.get_action_strength("move_duck"),Input.get_action_strength("move_jump"),Input.get_action_strength("move_walk"))
+ machine.mouse_input(Input.get_action_strength("fire"), Input.get_action_strength("fire3"),Input.get_action_strength("fire2"))
else:
jumping = Input.get_action_strength("move_jump")
if Input.is_action_just_pressed("fire"):
@@ -97,8 +96,8 @@ func initiate_use():
if ladder_m != null:
leave_ladder()
return
- if $Head/Camera/UseRay.is_colliding():
- var area_c = $Head/Camera/UseRay.get_collider()
+ if $"%UseRay".is_colliding():
+ var area_c = $"%UseRay".get_collider()
match area_c.name:
"SteerArea":
world.rpc_id(1, "_call_on_server", "_client_request_control_vehicle", {"id" : world.client_id, "machine_path" : area_c.get_parent().get_path(), "char_name" : name})
@@ -121,17 +120,16 @@ remotesync func set_net_owner(owner_id):
$Nametag.visible = false
world.player_char = self
is_player = true
- cam.current = true
+ world.cam.attach(self, "FIRSTPERSON", "./Neck/Head")
else:
$Nametag.visible = true
- cam.current = false
is_player = false
world.get_node("HUD").update_characters()
func deselect_character():
if is_network_master():
world.player_char = null
- world.get_node("DEFAULTCAM").current = true
+ if world.client_id != 1: world.cam.attach(world, "STATIC", "./DEFAULTCAM")
rpc("set_net_owner", 1)
func take_control_of_machine(slave_machine):
@@ -139,8 +137,7 @@ func take_control_of_machine(slave_machine):
controlling_machine = true
func lose_machine():
- if is_player:
- cam.current = true
+ if is_network_master(): world.cam.attach(self, "FIRSTPERSON", "./Neck/Head")
controlling_machine = false
machine = null
@@ -153,19 +150,20 @@ func _physics_process(delta: float) -> void:
swim(delta)
else:
walk(delta)
- rpc("set_phys_transform", transform, linear_velocity)
is_on_floor = false #reset whether is on floor in between frames
# called each physics frame
func on_floor_test() -> bool:
if $Feet.is_colliding():
is_on_floor = true
+ floor_normal = Vector3.UP
floorspeed = $Feet.get_collider().get_linear_velocity() if $Feet.get_collider().has_method("get_linear_velocity") else Vector3.ZERO
return true
if player_state:
for i in range(player_state.get_contact_count()):
var contact_angle_from_up : float = Vector3.UP.angle_to(player_state.get_contact_local_normal(i))
if contact_angle_from_up < FLOOR_MAX_ANGLE:
+ floor_normal = player_state.get_contact_local_normal(i)
is_on_floor = true
return true
return false
@@ -174,6 +172,7 @@ func on_floor_test() -> bool:
func _integrate_forces(state) -> void:
player_state = state
velocity = state.get_linear_velocity()
+ $normal_vis.look_at($normal_vis.global_transform.origin + global_transform.basis.z, floor_normal)
for i in range(player_state.get_contact_count()):
var contact_angle_from_up : float = Vector3.UP.angle_to(player_state.get_contact_local_normal(i))
if contact_angle_from_up > FLOOR_MAX_ANGLE and !is_on_floor:
@@ -181,13 +180,8 @@ func _integrate_forces(state) -> void:
break
if i == player_state.get_contact_count() - 1:
friction = 1
-
-# on input event
-func _input(event: InputEvent) -> void:
- if is_player:
- if event is InputEventMouseMotion:
- mouse_axis = event.relative
- camera_rotation()
+ if is_network_master():
+ rpc("set_phys_transform", transform, linear_velocity)
func walk(_delta:float) -> void:
# Input
@@ -197,6 +191,8 @@ func walk(_delta:float) -> void:
direction.y = 0
direction = direction.normalized()
+ if floor_normal != Vector3.UP: direction = direction.rotated(floor_normal.cross(Vector3.UP).normalized(), Vector3.UP.angle_to(floor_normal))
+
# Jump
if is_player and jumping and is_on_floor and can_jump:
jump()
@@ -212,7 +208,7 @@ func walk(_delta:float) -> void:
var projVel = Vector2(velocity.x-floorspeed.x,velocity.z-floorspeed.z).dot(Vector2(direction.x,direction.z))
if is_on_floor:
- add_central_force(-mass*linear_velocity.normalized()*c_friction)#friction
+ add_central_force(-mass*_cspeed*linear_velocity.normalized()*c_friction)#friction
if _speed - _cspeed > 0:
add_central_force (mass*Vector3(direction.x*_temp_accel, 0, direction.z*_temp_accel))#velocity.x += direction.x*_temp_accel
else:
@@ -231,7 +227,7 @@ func swim(_delta):
add_central_force(Vector3.UP*weight*1.0)
add_central_force(-1*linear_velocity*75)
#controls
- var dir: Basis = cam.get_global_transform().basis
+ var dir: Basis = head.get_global_transform().basis
var m_dir: Vector3 = -move_axis.x * dir.z + move_axis.y * dir.x
m_dir = m_dir.normalized()
add_central_force(swim_speed*m_dir)
@@ -293,22 +289,5 @@ remotesync func remove_dead_character():
deselect_character()
queue_free()
-func camera_rotation() -> void:
- if Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED:
- return
- if mouse_axis.length() > 0:
- var horizontal: float = -mouse_axis.x * (mouse_sensitivity / 100)
- var vertical: float = -mouse_axis.y * (mouse_sensitivity / 100)
-
- mouse_axis = Vector2()
-
- head.rotate_y(deg2rad(horizontal))
- cam.rotate_x(deg2rad(vertical))
-
- # Clamp mouse rotation
- var temp_rot: Vector3 = cam.rotation_degrees
- temp_rot.x = clamp(temp_rot.x, -90, 90)
- cam.rotation_degrees = temp_rot
-
remotesync func net_apply_impulse(impulse_v):
apply_central_impulse(impulse_v)
diff --git a/godot/scripts/machines/Cannon.gd b/godot/scripts/machines/Cannon.gd
index 15807bf..437a20b 100644
--- a/godot/scripts/machines/Cannon.gd
+++ b/godot/scripts/machines/Cannon.gd
@@ -1,4 +1,4 @@
-extends "res://bin/networked_machine.gdns"
+extends "res://scripts/machines/NetworkedMachineGDS.gd"
var world_ballistics = null
@@ -33,13 +33,13 @@ func mp_init(init_info):
# Called when the node enters the scene tree for the first time.
func _ready():
- if get_parent().name != "MACHINES":
+ if get_parent().name != "MACHINES": #if cannon is aboard ship
add_collision_exception_with(get_parent())
mode = RigidBody.MODE_STATIC
world_ballistics = world.get_node("BALLISTICS")
func on_new_control():
- $YawJoint/PitchJoint/Camera.current = true
+ if is_network_master(): world.cam.attach(self, "STATIC", "./YawJoint/PitchJoint/CameraPoint")
func _physics_process(delta):
if cooldown > 0:
@@ -72,8 +72,10 @@ remotesync func fire():
add_collision_exception_with(cball)
cball.global_transform.origin = muzzle.global_transform.origin
cball.linear_velocity = muzzle.global_transform.basis.x*ball_speed
+ cball.shooter = user.name + " (" + world.players_info[user.get_network_master()][0] + ")"
+ cball.shooter_id = user.get_network_master()
cooldown = fire_rate
if mode == RigidBody.MODE_STATIC:
get_parent().apply_impulse($YawJoint/PitchJoint.global_transform.origin - get_parent().global_transform.origin, -5*cball.mass*ball_speed*muzzle.global_transform.basis.x)
else:
- apply_impulse($YawJoint/PitchJoint.global_transform.origin - global_transform.origin, -1*cball.mass*ball_speed*muzzle.global_transform.basis.x)
+ if is_network_master(): apply_impulse($YawJoint/PitchJoint.global_transform.origin - global_transform.origin, -1*cball.mass*ball_speed*muzzle.global_transform.basis.x)
diff --git a/godot/scripts/machines/NetworkedMachineGDS.gd b/godot/scripts/machines/NetworkedMachineGDS.gd
index 5ce5cbe..3f2d420 100644
--- a/godot/scripts/machines/NetworkedMachineGDS.gd
+++ b/godot/scripts/machines/NetworkedMachineGDS.gd
@@ -5,6 +5,7 @@ var user = null
var world = null
func _ready():
+ print("net machine loads world")
world = get_tree().get_root().find_node("GAMEWORLD", true, false)
remote func update_phys_transform(t, lv, av):
@@ -52,3 +53,9 @@ func attack2():
func direction_input(_fwd,_bwd,_left,_right,_left2,_right2):
pass
+
+func misc_input(_ctrl,_space,_shift):
+ pass
+
+func mouse_input(_m1,_m3,_m2): #used for long-press actions
+ pass
diff --git a/godot/scripts/vehicles/Airplane.gd b/godot/scripts/vehicles/Airplane.gd
index cf3c21a..aa1f492 100644
--- a/godot/scripts/vehicles/Airplane.gd
+++ b/godot/scripts/vehicles/Airplane.gd
@@ -2,8 +2,10 @@ extends VehicleBody
var countdown
var boosting = false
+var boost_pressed = false
const booster_force = 2500
const brake_force = 50
+var brake_control : float = 0.0
const boost_length = 8
const turn_constant = 0.45
const roll_constant = 0.5
@@ -20,35 +22,94 @@ var vel_slow
var parentvel = [Vector3.ZERO, Vector3.ZERO]
export var roll_curve : CurveTexture
+#net machine variables
+var in_use : bool = false
+var user = null
+var world = null
+func get_init_info():
+ return {"." : 0}
+
+func mp_init(init_info):
+ pass
+
+remote func update_phys_transform(t, lv, av):
+ transform = t
+ linear_velocity = lv
+ angular_velocity = av
+
+remotesync func net_apply_impulse(impulse_v):
+ apply_central_impulse(impulse_v)
+
+remotesync func set_net_owner(id, char_name):
+ set_network_master(id)
+ if id == 1 and char_name == "NONE": #not under control
+ on_no_control()
+ if user != null:
+ user.lose_machine()
+ user = null
+ in_use = false
+ else:
+ in_use = true
+ user = world.get_node("PLAYERS/"+char_name)
+ user.take_control_of_machine(self)
+ if is_network_master():
+ on_new_control()
+
+func relinquish_control():
+ rpc("set_net_owner", 1, "NONE")
+
+#TO BE OVERRIDDEN BY CHILDREN
+func on_new_control():
+ pass#user.add_collision_exception_with(self)
+ #user.global_transform.origin = $Cockpit.global_transform.origin
+
+func on_no_control():
+ pass#user.remove_collision_exception_with(self)
+ #user.global_transform.origin = $PilotExit.global_transform.origin
+
+func attack1():
+ pass
+
+func attack2():
+ pass
+
+func direction_input(fwd,bwd,left,right,_left2,_right2):
+ roll_dir = left - right
+ pitch_dir = bwd - fwd
+
+func misc_input(_ctrl,space,shift):
+ brake_control = shift
+ if space > 0.1 and !boosting: #if boost is pressed
+ trigger_boost()
+
+func mouse_input(_m1,_m3,_m2): #used for long-press actions
+ pass
func _ready():
+ world = get_tree().get_root().find_node("GAMEWORLD", true, false)
countdown = boost_length
brake = 5
- set_network_master(-1)
- set_physics_process(true)
- #mode = RigidBody.MODE_STATIC
func trigger_boost():
- if not boosting:
- print("boosting")
- boosting = true
+ print("boosting")
+ boosting = true
+ $"%RocketTrail".emitting = true
func _process(delta):
if is_network_master():
if boosting and countdown <= 0:
+ $"%RocketTrail".emitting = false
print("stopped boosting")
boosting = false
countdown = boost_length
- if Input.is_action_just_pressed("boost"):
- trigger_boost()
- roll_dir = Input.get_action_strength("roll_left") - Input.get_action_strength("roll_right")
- pitch_dir = Input.get_action_strength("pitch_up") - Input.get_action_strength("pitch_down")
- $rearwheel.brake = lerp($rearwheel.brake, Input.get_action_strength("brake")*brake_force, 0.05)
-
func _physics_process(delta):
+ if in_use and user.get_network_master() == world.client_id:
+ user.global_transform.origin = $Cockpit.global_transform.origin
+ user.global_transform.basis = $Cockpit.global_transform.basis.orthonormalized()
if is_network_master():
+ $rearwheel.brake = lerp($rearwheel.brake, brake_force*brake_control, 0.05)
v_angle = atan2(global_transform.basis.x.y,sqrt(global_transform.basis.x.z*global_transform.basis.x.z + global_transform.basis.x.x*global_transform.basis.x.x))
roll_angle = global_transform.basis.x.cross(Vector3.UP).angle_to($rightaileron.global_transform.origin-$wingcenter.global_transform.origin)
if $rightaileron.global_transform.origin.y < $leftaileron.global_transform.origin.y:
@@ -61,25 +122,11 @@ func _physics_process(delta):
#slow plane by drag and gravity
if linear_velocity.length() > 16 and linear_velocity.angle_to(global_transform.basis.x) < 0.25:
var v_dir = 1 if linear_velocity.y > 0 else -1
- vel_slow = v_dir*sqrt(abs(2*9.8*linear_velocity.y*delta)) + drag_constant + Input.get_action_strength("brake")*5
+ vel_slow = v_dir*sqrt(abs(2*9.8*linear_velocity.y*delta)) + drag_constant + brake_control*5
add_force(-1*linear_velocity.normalized()*vel_slow*mass,Vector3.ZERO)
-
-
- #pass #"inherit" linear and angular velocity of what plane is landed on
-
func _integrate_forces(state):
if is_network_master():
- #linear_velocity -= parentvel[0]; angular_velocity -= parentvel[1]
-# if $rightwheel.get_rpm() < 60 and $rightwheel.is_in_contact():
-# if $rightwheel/Area.get_overlapping_bodies()[0].has_method("get_linear_velocity"):
-# var ulv = $rightwheel/Area.get_overlapping_bodies()[0].linear_velocity
-# var uav = $rightwheel/Area.get_overlapping_bodies()[0].angular_velocity
-# var upos = $rightwheel/Area.get_overlapping_bodies()[0].global_transform.origin
-# ulv += (global_transform.origin - upos).rotated(uav.normalized(),uav.length()*state.get_step()) + global_transform.origin
-# parentvel = [ulv,uav]
-# else:
-# parentvel = [Vector3.ZERO, Vector3.ZERO]
if linear_velocity.length() > 25:
#linear_velocity = linear_velocity.normalized()*(linear_velocity.length()-vel_slow)
var ang_vel_target = Vector3.ZERO
@@ -91,7 +138,8 @@ func _integrate_forces(state):
#roll (rotate around lengthwise axis)
var is_returning = 3 if roll_dir == 0 else 1 #return to flat quicker
- ang_vel_target -= roll_constant*is_returning*(roll_dir*roll_curve.curve.interpolate(roll_angle_max-roll_angle))*global_transform.basis.x
+ print(roll_constant*is_returning*(roll_dir*roll_curve.curve.interpolate((roll_angle_max-roll_angle)/roll_angle_max))*global_transform.basis.x)
+ ang_vel_target += roll_constant*is_returning*(roll_dir*roll_curve.curve.interpolate(roll_angle_max-roll_angle))*global_transform.basis.x
#turn (based on how much the plane is rolled (need to add
ang_vel_target += turn_constant*Vector3.UP*roll_angle
@@ -101,6 +149,5 @@ func _integrate_forces(state):
if linear_velocity.angle_to(global_transform.basis.x) < 0.25:
set_linear_velocity(get_linear_velocity().slerp(transform.basis.x*linear_velocity.length(),0.1))
#linear_velocity += parentvel[0]; angular_velocity += parentvel[1]
- rpc("_set_position", global_transform, linear_velocity)
- elif get_network_master() == -1 and get_tree().get_network_unique_id() == 1:
- rpc("_set_position", global_transform, linear_velocity)
+ rpc("update_phys_transform", transform, linear_velocity, angular_velocity)
+
diff --git a/godot/scripts/vehicles/Gunboat.gd b/godot/scripts/vehicles/Gunboat.gd
index e1a61c5..8c3f54e 100644
--- a/godot/scripts/vehicles/Gunboat.gd
+++ b/godot/scripts/vehicles/Gunboat.gd
@@ -1,4 +1,4 @@
-extends "res://scripts/machines/NetworkedMachine.gd"
+extends "res://scripts/machines/NetworkedMachineGDS.gd"
export var team = 0
@@ -16,11 +16,14 @@ export var rudder_speed = 25
export var rudder_constant = 1800
const RUDDER_MAX = 60
-const health_max = 1000
+const health_max = 3000
var health = health_max
const damage_threshold = 20
const max_depth = 2
+#boat ids
+onready var nav_rid = $NavigationMeshInstance.get_region_rid()
+
#controls
var throttle: float = 0.0
var rudder: float = 0.0