diff options
Diffstat (limited to 'godot/scripts')
| -rw-r--r-- | godot/scripts/CharacterAIManager.gd | 2 | ||||
| -rw-r--r-- | godot/scripts/GameBase.gd | 15 | ||||
| -rw-r--r-- | godot/scripts/cameras/PlayerCamGDS.gd | 31 | ||||
| -rw-r--r-- | godot/scripts/characters/player_controller_new.gd | 4 | ||||
| -rw-r--r-- | godot/scripts/machines/Cannon.gd | 1 | ||||
| -rw-r--r-- | godot/scripts/vehicles/Airplane.gd | 3 |
6 files changed, 50 insertions, 6 deletions
diff --git a/godot/scripts/CharacterAIManager.gd b/godot/scripts/CharacterAIManager.gd index 61d38ae..ef5c026 100644 --- a/godot/scripts/CharacterAIManager.gd +++ b/godot/scripts/CharacterAIManager.gd @@ -30,7 +30,7 @@ func _physics_process(_delta): var bodies = cur_req["char"].get_node("AISearchArea").get_overlapping_bodies() for body in bodies: if body.name.begins_with(cur_req_args["objtype"]): - var path: PoolVector3Array = NavigationServer.map_get_path(WORLD_MAP_RID, cur_req["char"].global_transform.origin, body.global_transform.origin, cur_req_args["optimize"]) + #var path: PoolVector3Array = NavigationServer.map_get_path(WORLD_MAP_RID, cur_req["char"].global_transform.origin, body.global_transform.origin, cur_req_args["optimize"]) cur_req["char"].ai_set_path_target(body.global_transform.origin) #cur_req["char"].ai_set_path_array(path) cur_req["char"].ai_set_look_status(body, "TRACK") diff --git a/godot/scripts/GameBase.gd b/godot/scripts/GameBase.gd index abc269f..e77d070 100644 --- a/godot/scripts/GameBase.gd +++ b/godot/scripts/GameBase.gd @@ -8,7 +8,7 @@ var local_server_tree = null var player_name : String var player_team : String var player_char = null -onready var cam = $PLAYERCAM +onready var cam: ClippedCamera = $PLAYERCAM onready var hud = $HUD var players_info = {} #dictionary of id : name, team, ping, etc. @@ -17,6 +17,17 @@ var is_chatting: bool = false var winddir = Vector3(1,0,0) +signal screen_shake(location, strength, time) + +func _ready(): + connect("screen_shake", self, "shake_cam") + +func shake_cam(loc, strength, time): + var dist: float = (cam.global_transform.origin - loc).length() + if dist < 30: + strength = strength*exp(-dist/10) + cam.shake(strength, time) + func _process(delta): $HUD/Health.text = str(player_char.health) if player_char != null else "" if is_local: @@ -89,11 +100,13 @@ func client_disconnect(): player_char.deselect_character() client.close_connection() if is_local: + local_server_tree.get_root().get_node("GAMEWORLD/Server").stop_server() local_server_tree.free() back_to_main() func _connection_lost(): if is_local: + local_server_tree.get_root().get_node("GAMEWORLD/Server").stop_server() local_server_tree.free() back_to_main() diff --git a/godot/scripts/cameras/PlayerCamGDS.gd b/godot/scripts/cameras/PlayerCamGDS.gd index 382ec06..77ca552 100644 --- a/godot/scripts/cameras/PlayerCamGDS.gd +++ b/godot/scripts/cameras/PlayerCamGDS.gd @@ -14,10 +14,41 @@ var arm: SpringArm = null var mouse_axis: Vector2 var mouse_sensitivity: float = 12.0 +var shake_amount:float = 0.0 +const shake_limit:float = 0.2 +onready var shake_timer:Timer = Timer.new() +onready var shake_tween: Tween = Tween.new() + func _ready(): + add_child(shake_timer) + add_child(shake_tween) Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + shake_timer.connect("timeout", self, "_on_shake_timer_timeout") current = true +func _process(_delta): + if mode == "STATIC": + transform.origin = Vector3(rand_range(-shake_amount, shake_amount), rand_range(-shake_amount, shake_amount), rand_range(-shake_amount, shake_amount)) + if mode == "FIRSTPERSON": + head.transform.origin = Vector3(rand_range(-shake_amount, shake_amount), rand_range(-shake_amount, shake_amount), rand_range(-shake_amount, shake_amount)) + +func shake(new_shake, shake_time=0.4): + shake_amount += new_shake + if shake_amount > shake_limit: + shake_amount = shake_limit + + shake_tween.stop_all() + set_process(true) + shake_timer.start(shake_time) + + +func _on_shake_timer_timeout(): + shake_amount = 0 + set_process(false) + shake_tween.interpolate_property(head, "translation", head.transform.origin, Vector3.ZERO, + 0.1, Tween.TRANS_QUAD, Tween.EASE_IN_OUT) + shake_tween.start() + func _input(event: InputEvent): if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: mouse_axis = event.relative diff --git a/godot/scripts/characters/player_controller_new.gd b/godot/scripts/characters/player_controller_new.gd index d78b6e3..62f5ef6 100644 --- a/godot/scripts/characters/player_controller_new.gd +++ b/godot/scripts/characters/player_controller_new.gd @@ -266,10 +266,10 @@ func _integrate_forces(state: PhysicsDirectBodyState) -> void: 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: - friction = 0 + physics_material_override.friction = 0 break if i == player_state.get_contact_count() - 1: - friction = 1 + physics_material_override.friction = 1 rpc("set_phys_transform", transform, linear_velocity) if global_transform.origin.y < -30: diff --git a/godot/scripts/machines/Cannon.gd b/godot/scripts/machines/Cannon.gd index b66903a..6b988a0 100644 --- a/godot/scripts/machines/Cannon.gd +++ b/godot/scripts/machines/Cannon.gd @@ -82,6 +82,7 @@ func attack1(): rpc("fire") remotesync func fire(): + world.emit_signal("screen_shake", global_transform.origin, 0.05, 0.2) loaded = false controllable = false status.set_visible(true) diff --git a/godot/scripts/vehicles/Airplane.gd b/godot/scripts/vehicles/Airplane.gd index 705820d..2de4792 100644 --- a/godot/scripts/vehicles/Airplane.gd +++ b/godot/scripts/vehicles/Airplane.gd @@ -102,11 +102,10 @@ remotesync func trigger_boost(): remotesync func end_boost(): $"%RocketTrail".emitting = false - print("stopped boosting") boosting = false countdown = boost_length -func _process(delta): +func _process(_delta): if is_network_master(): if boosting and countdown <= 0: rpc("end_boost") |
