summaryrefslogtreecommitdiff
path: root/godot/scripts/vehicles
diff options
context:
space:
mode:
Diffstat (limited to 'godot/scripts/vehicles')
-rw-r--r--godot/scripts/vehicles/Airplane.gd109
-rw-r--r--godot/scripts/vehicles/Gunboat.gd7
2 files changed, 83 insertions, 33 deletions
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