diff --git a/Game/.godot/editor/project_metadata.cfg b/Game/.godot/editor/project_metadata.cfg index f0a5f4f..986be70 100644 --- a/Game/.godot/editor/project_metadata.cfg +++ b/Game/.godot/editor/project_metadata.cfg @@ -1,17 +1,17 @@ [editor_metadata] -executable_path="/data/Applications/Godot/4.0/godot" +executable_path="/data/Projects/Games/Liblast/Godot/godot" [debug_options] run_live_debug=true run_reload_scripts=true -run_debug_instances=1 +run_debug_instances=2 [recent_files] -scenes=[ "res://Main.tscn" ] -scripts=[ "NetworkedMultiplayerPeer", "LightmapProbe", "Node3D", "res://Player.gd" ] +scenes=["res://Main.tscn", "res://Assets/Characters/Player.tscn", "res://Assets/HUD/HUD.tscn", "res://Map.tscn", "res://Server.tscn", "res://Assets/Weapons/Handgun/Flash.tscn", "res://Assets/Weapons/Handgun/Casing.tscn", "res://Assets/Weapons/Weapon.tscn", "res://Assets/Maps/DM1/DM1.glb", "res://Assets/Props/BeerCan.glb"] +scripts=["Dictionary", "RigidBody3D", "OS", "Node3D", "Node", "MultiplayerAPI", "MeshInstance3D", "Input", "Callable", "@GlobalScope"] [script_setup] @@ -20,13 +20,14 @@ last_selected_language="GDScript" [dialog_bounds] -project_settings=Rect2( 0, 29, 1920, 1006 ) -editor_settings=Rect2( 1920, 29, 1920, 1051 ) +search_help=Rect2(476, 495, 960, 540) +export=Rect2(533, 181, 900, 700) +project_settings=Rect2(0, 29, 1920, 1006) [project_settings] advanced_mode=true -[inspector_options] +[export_options] -material_preview_on_sphere=true +default_filename="Liblast Linux" diff --git a/Game/Assets/Characters/Player.gd b/Game/Assets/Characters/Player.gd index 5d31d96..f3b312b 100644 --- a/Game/Assets/Characters/Player.gd +++ b/Game/Assets/Characters/Player.gd @@ -1,14 +1,11 @@ extends CharacterBody3D @export var mouse_sensitivity := 0.35 -#var speed := 15 @onready var hud = get_tree().root.get_node("Main").get_node("HUD") @onready var crosshair = hud.get_node("Crosshair") @onready var vignette = hud.get_node("Vignette") - - @onready var head = $Head @onready var camera = $Head/Camera @onready var tween = $Head/Camera/Tween @@ -53,7 +50,9 @@ var input_active = false var player_info: PlayerInfo var base_fov = 90 -var view_zoom := 1.0 : +var view_zoom_target := 1.0 +var view_zoom_direction = true +var view_zoom := view_zoom_target : set(zoom): view_zoom = zoom camera.fov = base_fov / zoom @@ -95,8 +94,12 @@ var jump := 14 var velocity := Vector3.ZERO var gravity_vec := Vector3.ZERO -@puppetsync func set_info(info): +@puppetsync func set_info(info) -> void: player_info = PlayerInfo.new(info['name'], info['team'].to_int(), Color(info['color'])) + print("set_info - rpc called from ", get_tree().get_rpc_sender_id()) + +@master func update_info() -> void: + rpc(&'set_info', player_info.serialize()) @master func generate_info() -> void: var player_name = "" @@ -112,7 +115,7 @@ var gravity_vec := Vector3.ZERO func _ready() -> void: #Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) - view_zoom = 1.0 + view_zoom_target = 1.0 generate_info() @@ -148,20 +151,18 @@ func _input(event) -> void: # tween.remove_all() # tween.interpolate_property(self, "view_zoom", view_zoom, 4.0, 0.5, Tween.TRANS_SINE, Tween.EASE_IN_OUT) # tween.start() - - view_zoom = 4.0 + view_zoom_direction = true + view_zoom_target = 4.0 if Input.is_action_just_released("view_zoom"): # tween.remove_all() # tween.interpolate_property(self, "view_zoom", view_zoom, 1.0, 0.25, Tween.TRANS_SINE, Tween.EASE_IN_OUT) # tween.start() + view_zoom_direction = false + view_zoom_target = 1.0 - view_zoom = 1.0 - -# rpc_unreliable(&'aim', event) aim(event) -# rpc(&'aim', event) - + if Input.is_action_just_pressed("trigger_primary"): weapon.rpc(&'trigger', 0, true) elif Input.is_action_just_released("trigger_primary"): @@ -170,7 +171,14 @@ func _input(event) -> void: weapon.rpc(&'trigger', 1, true) elif Input.is_action_just_released("trigger_secondary"): weapon.rpc(&'trigger', 1, false) - + +func _process(delta): + if view_zoom_direction and view_zoom < view_zoom_target: + view_zoom = min(view_zoom_target, view_zoom + delta * 4) + elif not view_zoom_direction and view_zoom > view_zoom_target: + view_zoom = max(view_zoom_target, view_zoom - delta * 4) + + func _physics_process(delta): # rpc_unreliable(&'set_global_transform', global_transform) # head.rpc_unreliable(&'set_rotation', head.get_rotation()) diff --git a/Game/Assets/HUD/HUD.tscn b/Game/Assets/HUD/HUD.tscn index 1752ffd..a1fa4ae 100644 --- a/Game/Assets/HUD/HUD.tscn +++ b/Game/Assets/HUD/HUD.tscn @@ -133,6 +133,7 @@ stream = ExtResource( 3 ) script = null [node name="Vignette" type="TextureRect" parent="."] +modulate = Color(1, 1, 1, 0) anchor_right = 1.0 anchor_bottom = 1.0 texture = ExtResource( 1 ) diff --git a/Game/Assets/UI/Menu.gd b/Game/Assets/UI/Menu.gd index 3eb8e86..477ce81 100644 --- a/Game/Assets/UI/Menu.gd +++ b/Game/Assets/UI/Menu.gd @@ -8,7 +8,7 @@ func _ready(): $Back.hide() func open_menu(path : String): - var menu = load(path).instance() + var menu = load(path).instantiate() menu.previous_menu = self get_parent().add_child(menu) hide() diff --git a/Game/Assets/Weapons/Handgun/Casing.gltf.import b/Game/Assets/Weapons/Handgun/Casing.gltf.import index c0d2b12..a832815 100644 --- a/Game/Assets/Weapons/Handgun/Casing.gltf.import +++ b/Game/Assets/Weapons/Handgun/Casing.gltf.import @@ -8,7 +8,7 @@ path="res://.godot/imported/Casing.gltf-2dbae5f7e896c690e0ad2c5617eec138.scn" [deps] source_file="res://Assets/Weapons/Handgun/Casing.gltf" -dest_files=[ "res://.godot/imported/Casing.gltf-2dbae5f7e896c690e0ad2c5617eec138.scn" ] +dest_files=["res://.godot/imported/Casing.gltf-2dbae5f7e896c690e0ad2c5617eec138.scn"] [params] @@ -25,4 +25,14 @@ animation/import=true animation/fps=15 import_script/path="" _subresources={ +"meshes": { +"Casing_Cylinder": { +"generate/lods": 1 +} +}, +"nodes": { +"PATH:Casing_LOD1": { +"import/skip_import": true +} +} } diff --git a/Game/Assets/Weapons/Handgun/Casing.tscn b/Game/Assets/Weapons/Handgun/Casing.tscn index 3582b28..f5c37c9 100644 --- a/Game/Assets/Weapons/Handgun/Casing.tscn +++ b/Game/Assets/Weapons/Handgun/Casing.tscn @@ -11,19 +11,14 @@ radius = 0.0119513 height = 0.0560047 [node name="Casing" type="RigidBody3D"] -mass = 0.1 +mass = 0.01 physics_material_override = SubResource( 1 ) continuous_cd = true script = null [node name="CollisionShape3D" type="CollisionShape3D" parent="."] -transform = Transform3D( -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0 ) +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) shape = SubResource( 2 ) script = null [node name="Casing" parent="." instance=ExtResource( 1 )] - -[node name="Casing_LOD0" parent="Casing" index="0"] -visible = false - -[editable path="Casing"] diff --git a/Game/Assets/Weapons/Handgun/Flash.tscn b/Game/Assets/Weapons/Handgun/Flash.tscn index 0a36afd..78d7da3 100644 --- a/Game/Assets/Weapons/Handgun/Flash.tscn +++ b/Game/Assets/Weapons/Handgun/Flash.tscn @@ -13,10 +13,10 @@ tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PackedFloat32Array( 0, 0.025, 0.1 ), -"transitions": PackedFloat32Array( 1, 0.420448, 1 ), +"times": PackedFloat32Array(0, 0.025, 0.1), +"transitions": PackedFloat32Array(1, 0.420448, 1), "update": 0, -"values": [ Color( 4, 4, 3, 1 ), Color( 4, 2, 0.3, 1 ), Color( 0, 0, 0, 1 ) ] +"values": [Color(4, 4, 3, 1), Color(4, 2, 0.3, 1), Color(0, 0, 0, 1)] } tracks/1/type = "value" tracks/1/path = NodePath("MeshInstance3D:position") @@ -25,10 +25,10 @@ tracks/1/loop_wrap = true tracks/1/imported = false tracks/1/enabled = true tracks/1/keys = { -"times": PackedFloat32Array( 0, 0.025, 0.1 ), -"transitions": PackedFloat32Array( 1, 1, 1 ), +"times": PackedFloat32Array(0, 0.025, 0.1), +"transitions": PackedFloat32Array(1, 1, 1), "update": 0, -"values": [ Vector3( -0.535305, 0.124179, 0 ), Vector3( -0.620616, 0.124179, 0 ), Vector3( -1.57472, 0.124179, 0 ) ] +"values": [Vector3(-0.535305, 0.124179, 0), Vector3(-0.620616, 0.124179, 0), Vector3(-1.57472, 0.124179, 0)] } tracks/2/type = "value" tracks/2/path = NodePath("MeshInstance3D:scale") @@ -37,10 +37,10 @@ tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { -"times": PackedFloat32Array( 0, 0.025, 0.1 ), -"transitions": PackedFloat32Array( 1, 1, 1 ), +"times": PackedFloat32Array(0, 0.025, 0.1), +"transitions": PackedFloat32Array(1, 1, 1), "update": 0, -"values": [ Vector3( -0.336758, -0.0845939, -0.0845939 ), Vector3( -0.299894, -0.119659, -0.119659 ), Vector3( -0.197144, -0.00375807, -0.00375807 ) ] +"values": [Vector3(-0.336758, -0.0845939, -0.0845939), Vector3(-0.299894, -0.119659, -0.119659), Vector3(-0.197144, -0.00375807, -0.00375807)] } tracks/3/type = "value" tracks/3/path = NodePath("OmniLight3D:light_color") @@ -49,10 +49,10 @@ tracks/3/loop_wrap = true tracks/3/imported = false tracks/3/enabled = true tracks/3/keys = { -"times": PackedFloat32Array( 0, 0.025, 0.05, 0.1 ), -"transitions": PackedFloat32Array( 1, 1, 1, 1 ), +"times": PackedFloat32Array(0, 0.025, 0.05, 0.1), +"transitions": PackedFloat32Array(1, 1, 1, 1), "update": 0, -"values": [ Color( 1, 1, 1, 1 ), Color( 1, 0.933333, 0.380392, 1 ), Color( 1, 0.637428, 0.415262, 1 ), Color( 0, 0, 0, 1 ) ] +"values": [Color(1, 1, 1, 1), Color(1, 0.933333, 0.380392, 1), Color(1, 0.637428, 0.415262, 1), Color(0, 0, 0, 1)] } [sub_resource type="Animation" id=2] @@ -64,10 +64,10 @@ tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PackedFloat32Array( 0 ), -"transitions": PackedFloat32Array( 1 ), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 0, -"values": [ Color( 0, 0, 0, 1 ) ] +"values": [Color(0, 0, 0, 1)] } [sub_resource type="Animation" id=3] @@ -79,10 +79,10 @@ tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PackedFloat32Array( 0 ), -"transitions": PackedFloat32Array( 1 ), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 0, -"values": [ Color( 4, 2, 0.3, 1 ) ] +"values": [Color(4, 2, 0.3, 1)] } tracks/1/type = "value" tracks/1/path = NodePath("MeshInstance3D:position") @@ -91,10 +91,10 @@ tracks/1/loop_wrap = true tracks/1/imported = false tracks/1/enabled = true tracks/1/keys = { -"times": PackedFloat32Array( 0 ), -"transitions": PackedFloat32Array( 1 ), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 0, -"values": [ Vector3( -0.620616, 0.124179, 0 ) ] +"values": [Vector3(-0.620616, 0.124179, 0)] } tracks/2/type = "value" tracks/2/path = NodePath("MeshInstance3D:scale") @@ -103,10 +103,10 @@ tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { -"times": PackedFloat32Array( 0 ), -"transitions": PackedFloat32Array( 1 ), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 0, -"values": [ Vector3( -0.299894, -0.119659, -0.119659 ) ] +"values": [Vector3(-0.299894, -0.119659, -0.119659)] } tracks/3/type = "value" tracks/3/path = NodePath("OmniLight3D:light_color") @@ -115,19 +115,19 @@ tracks/3/loop_wrap = true tracks/3/imported = false tracks/3/enabled = true tracks/3/keys = { -"times": PackedFloat32Array( 0 ), -"transitions": PackedFloat32Array( 1 ), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 0, -"values": [ Color( 1, 1, 1, 1 ) ] +"values": [Color(1, 1, 1, 1)] } [sub_resource type="StandardMaterial3D" id=4] blend_mode = 1 shading_mode = 0 -albedo_color = Color( 4, 2, 0.3, 1 ) +albedo_color = Color(4, 2, 0.3, 1) albedo_texture = ExtResource( 1 ) -uv1_scale = Vector3( 0.25, 0.25, 0.25 ) -uv1_offset = Vector3( 0.25, 0.25, 0.25 ) +uv1_scale = Vector3(0.25, 0.25, 0.25) +uv1_offset = Vector3(0.25, 0.25, 0.25) uv1_triplanar = true proximity_fade_distance = 3.94 @@ -140,7 +140,7 @@ rings = 8 blend_mode = 1 shading_mode = 0 vertex_color_use_as_albedo = true -albedo_color = Color( 3, 3, 3, 1 ) +albedo_color = Color(3, 3, 3, 1) albedo_texture = ExtResource( 1 ) billboard_mode = 3 particles_anim_h_frames = 2 @@ -149,14 +149,14 @@ particles_anim_loop = false [sub_resource type="QuadMesh" id=7] material = SubResource( 6 ) -size = Vector2( 0.3, 0.3 ) +size = Vector2(0.3, 0.3) [sub_resource type="Curve" id=8] -_data = [ Vector2( 0, 0 ), 0.0, 8.69697, 0, 0, Vector2( 0.501742, 0.918182 ), -1.36667, -1.36667, 0, 0, Vector2( 1, 0.0363636 ), -3.03219, 0.0, 0, 0 ] +_data = [Vector2(0, 0), 0.0, 8.69697, 0, 0, Vector2(0.501742, 0.918182), -1.36667, -1.36667, 0, 0, Vector2(1, 0.0363636), -3.03219, 0.0, 0, 0] [sub_resource type="Gradient" id=9] -offsets = PackedFloat32Array( 0, 0.0568182, 0.454545, 0.746212, 1 ) -colors = PackedColorArray( 1, 1, 1, 1, 2, 1.7, 0.7, 1, 1, 0.682129, 0.34375, 1, 0.675781, 0.355111, 0.0976715, 1, 0, 0, 0, 1 ) +offsets = PackedFloat32Array(0, 0.0568182, 0.454545, 0.746212, 1) +colors = PackedColorArray(1, 1, 1, 1, 2, 1.7, 0.7, 1, 1, 0.682129, 0.34375, 1, 0.675781, 0.355111, 0.0976715, 1, 0, 0, 0, 1) [node name="Flash" type="Node3D"] script = ExtResource( 2 ) @@ -166,11 +166,11 @@ autoplay = "Off" anims/Flash = SubResource( 1 ) anims/Off = SubResource( 2 ) anims/RESET = SubResource( 3 ) -blend_times = [ ] +blend_times = [] script = null [node name="MeshInstance3D" type="MeshInstance3D" parent="."] -transform = Transform3D( -0.299894, 0, 0, 0, -0.119659, 0, 0, 0, -0.119659, -0.620616, 0.124179, 0 ) +transform = Transform3D(-0.299894, 0, 0, 0, -0.119659, 0, 0, 0, -0.119659, -0.620616, 0.124179, 0) visible = false mesh = SubResource( 5 ) surface_material_override/0 = null @@ -185,9 +185,9 @@ lifetime_randomness = 0.2 fixed_fps = 120 mesh = SubResource( 7 ) particle_flag_rotate_y = true -direction = Vector3( 0, 1, 0 ) +direction = Vector3(0, 1, 0) spread = 0.0 -gravity = Vector3( 0, 0, 0 ) +gravity = Vector3(0, 0, 0) initial_velocity = 12.0 initial_velocity_random = 0.9 damping = 100.0 @@ -208,8 +208,9 @@ autostart = true script = null [node name="OmniLight3D" type="OmniLight3D" parent="."] -transform = Transform3D( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.230188, 0 ) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.160545, 0) light_energy = 5.0 +light_bake_mode = 0 shadow_enabled = true shadow_blur = 8.0 omni_range = 100.0 diff --git a/Game/Assets/Weapons/Weapon.gd b/Game/Assets/Weapons/Weapon.gd index bc33b25..8f7866e 100644 --- a/Game/Assets/Weapons/Weapon.gd +++ b/Game/Assets/Weapons/Weapon.gd @@ -1,5 +1,6 @@ extends Node3D - + #Hand Camera Head Player +@onready var player = get_parent().get_parent().get_parent().get_parent() @onready var ejector = find_node("Ejector") @onready var muzzle = find_node("Muzzle") @@ -13,7 +14,7 @@ var flash = preload("res://Assets/Weapons/Handgun/Flash.tscn") #enum Trigger {TRIGGER_PRIMARY, TRIGGER_SECONDARY} @puppetsync func trigger(index: int, active: bool) -> void: - print("Weapon " + str(name) + ", Trigger " + str(index) + ", active: " + str(active)) + #print("Weapon " + str(name) + ", Trigger " + str(index) + ", active: " + str(active)) if index == 0 and active: @@ -27,6 +28,21 @@ var flash = preload("res://Assets/Weapons/Handgun/Flash.tscn") get_parent().add_child(flash_effect) flash_effect.global_transform = muzzle.global_transform + + var casing_instance + if casing.has_method(&"instance"): + casing_instance = casing.instance() + else: + casing_instance = casing.instantiate() + + get_tree().root.add_child(casing_instance) + + casing_instance.global_transform = ejector.global_transform.translated(player.linear_velocity / 30) #approximating delta + #casing_instance.rotate_object_local(Vector3.FORWARD, deg2rad(90)) + #casing_instance.angular_velocity = - ejector.global_transform.basis[2] * randf_range(13, 17) + casing_instance.linear_velocity = ejector.global_transform.basis[0] * randf_range(6.2, 8.5)# - ejector.global_transform.basis[2] * randf_range(-1.2, -1.7) + player.linear_velocity + + # Called when the node enters the scene tree for the first time. func _ready(): diff --git a/Game/Assets/Weapons/Weapon.tscn b/Game/Assets/Weapons/Weapon.tscn index c9c4f55..d8e87fd 100644 --- a/Game/Assets/Weapons/Weapon.tscn +++ b/Game/Assets/Weapons/Weapon.tscn @@ -12,21 +12,21 @@ tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true -tracks/0/keys = PackedFloat32Array( 0, 1, 0, 0, 0, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1, 0.0666667, 1, 0, -0.0742494, 0, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1, 0.133333, 1, 0, -0.0638517, -7.45058e-09, 4.61853e-14, -3.28166e-28, -7.10543e-15, 1, 1, 1, 1, 0.266667, 1, -1.49012e-08, -0.0154906, -7.45058e-09, 4.9738e-14, -1.06023e-27, -2.13163e-14, 1, 1, 1, 1, 0.333333, 1, -1.49012e-08, -0.000740513, -7.45058e-09, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1, 0.4, 1, 0, 0, 0, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1, 0.433333, 1, 0, 0, 0, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1 ) +tracks/0/keys = PackedFloat32Array(0, 1, 0, 0, 0, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1, 0.0666667, 1, 0, -0.0742494, 0, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1, 0.133333, 1, 0, -0.0638517, -7.45058e-09, 4.61853e-14, -3.28166e-28, -7.10543e-15, 1, 1, 1, 1, 0.266667, 1, -1.49012e-08, -0.0154906, -7.45058e-09, 4.9738e-14, -1.06023e-27, -2.13163e-14, 1, 1, 1, 1, 0.333333, 1, -1.49012e-08, -0.000740513, -7.45058e-09, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1, 0.4, 1, 0, 0, 0, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1, 0.433333, 1, 0, 0, 0, 7.10543e-15, -5.04871e-29, -7.10543e-15, 1, 1, 1, 1) tracks/1/type = "transform" tracks/1/path = NodePath("Handgun_Armature/Skeleton3D:Clip") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/imported = false tracks/1/enabled = true -tracks/1/keys = PackedFloat32Array( 0, 1, 0, 0, 0, -1.49012e-08, 7.45058e-09, -7.45058e-09, 1, 1, 1, 1, 0.433333, 1, 0, 0, 0, -1.49012e-08, 7.45058e-09, -7.45058e-09, 1, 1, 1, 1 ) +tracks/1/keys = PackedFloat32Array(0, 1, 0, 0, 0, -1.49012e-08, 7.45058e-09, -7.45058e-09, 1, 1, 1, 1, 0.433333, 1, 0, 0, 0, -1.49012e-08, 7.45058e-09, -7.45058e-09, 1, 1, 1, 1) tracks/2/type = "transform" tracks/2/path = NodePath("Handgun_Armature/Skeleton3D:Root") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true -tracks/2/keys = PackedFloat32Array( 0, 1, 0, 0, 0, 0, -2.52435e-29, 7.10543e-15, 1, 1, 1, 1, 0.0666667, 1, 0.00131352, 0.00153854, -0.00218139, 0.0163412, 1.22913e-08, 0.00983989, 0.999818, 1, 1, 1, 0.133333, 1, 0.00476759, 0.00558436, -0.00791762, 0.0593126, 5.85811e-08, 0.0357152, 0.9976, 1, 1, 1, 0.2, 1, 0.00591084, 0.00692347, -0.00981623, 0.0734948, 2.37198e-08, 0.0442549, 0.996313, 1, 1, 1, 0.333333, 1, 0.00017027, 0.000199437, -0.000282773, 0.00211715, 6.15582e-08, 0.00127486, 0.999997, 1, 1, 1, 0.4, 1, 0, 0, 0, 0, -2.52435e-29, 7.10543e-15, 1, 1, 1, 1, 0.433333, 1, 0, 0, 0, 0, -2.52435e-29, 7.10543e-15, 1, 1, 1, 1 ) +tracks/2/keys = PackedFloat32Array(0, 1, 0, 0, 0, 0, -2.52435e-29, 7.10543e-15, 1, 1, 1, 1, 0.0666667, 1, 0.00131352, 0.00153854, -0.00218139, 0.0163412, 1.22913e-08, 0.00983989, 0.999818, 1, 1, 1, 0.133333, 1, 0.00476759, 0.00558436, -0.00791762, 0.0593126, 5.85811e-08, 0.0357152, 0.9976, 1, 1, 1, 0.2, 1, 0.00591084, 0.00692347, -0.00981623, 0.0734948, 2.37198e-08, 0.0442549, 0.996313, 1, 1, 1, 0.333333, 1, 0.00017027, 0.000199437, -0.000282773, 0.00211715, 6.15582e-08, 0.00127486, 0.999997, 1, 1, 1, 0.4, 1, 0, 0, 0, 0, -2.52435e-29, 7.10543e-15, 1, 1, 1, 1, 0.433333, 1, 0, 0, 0, 0, -2.52435e-29, 7.10543e-15, 1, 1, 1, 1) [node name="Weapon" type="Node3D"] script = ExtResource( 2 ) @@ -34,13 +34,13 @@ script = ExtResource( 2 ) [node name="Handgun" parent="." instance=ExtResource( 1 )] [node name="Skeleton3D" parent="Handgun/Handgun_Armature" index="0"] -bones/0/pose = Transform3D( 1, -1.42109e-14, -5.04871e-29, 1.42109e-14, 1, -3.58732e-43, 5.04871e-29, -3.58732e-43, 1, 0, 0, 0 ) -bones/1/pose = Transform3D( 1, 1.42109e-14, -2.01948e-28, -1.42109e-14, 1, -1.42109e-14, 0, 1.42109e-14, 1, 0, 0, 0 ) -bones/2/pose = Transform3D( 1, 1.49012e-08, 1.49012e-08, -1.49012e-08, 1, 2.98023e-08, -1.49012e-08, -2.98023e-08, 1, 0, 0, 0 ) +bones/0/pose = Transform3D(1, -1.42109e-14, -5.04871e-29, 1.42109e-14, 1, -3.58732e-43, 5.04871e-29, -3.58732e-43, 1, 0, 0, 0) +bones/1/pose = Transform3D(1, 1.42109e-14, -2.01948e-28, -1.42109e-14, 1, -1.42109e-14, 0, 1.42109e-14, 1, 0, 0, 0) +bones/2/pose = Transform3D(1, 1.49012e-08, 1.49012e-08, -1.49012e-08, 1, 2.98023e-08, -1.49012e-08, -2.98023e-08, 1, 0, 0, 0) [node name="AnimationPlayer" parent="Handgun" index="4"] autoplay = "Default" anims/Default = SubResource( 1 ) -blend_times = [ ] +blend_times = [] [editable path="Handgun"] diff --git a/Game/Main.gd b/Game/Main.gd index a158ff5..89dd701 100644 --- a/Game/Main.gd +++ b/Game/Main.gd @@ -1,12 +1,18 @@ extends Node enum GameFocus {MENU, GAME, CHAT, AWAY} +enum NetworkRole {NONE, CLIENT, SERVER, DEDICATED_SERVER, RELAY_SERVER} const NET_PORT = 12597 const NET_SERVER = "localhost" #liblast.unfa.xyz" var peer = NetworkedMultiplayerENet.new() +var role = NetworkRole.NONE: + set(new_role): + role = new_role + print("Network Role changed to ", NetworkRole.keys()[new_role]) + var player_scene = preload("res://Assets/Characters/Player.tscn") @onready var gui = $GUI @@ -14,6 +20,25 @@ var player_scene = preload("res://Assets/Characters/Player.tscn") @onready var chat = hud.get_node("Chat") var local_player: Node = null + +class PlayerList: + var items = {} + + func store(pid, item): + items[pid] = item + + func erase(pid): + items.erase(pid) + + func update(pid, item): + if items[pid]: + items[pid] = item + + func get(): + return items + +var player_list = [] + var focus = GameFocus.MENU : set(new_focus): match new_focus: @@ -36,6 +61,8 @@ var focus = GameFocus.MENU : focus = new_focus + + func _input(_event) -> void: if Input.is_action_just_pressed("ui_cancel"): if focus == GameFocus.GAME: @@ -65,19 +92,25 @@ func create_player(id: int, is_local: bool) -> void: $Players.get_node(str(id) + "/Head/Camera").current = false if local_player: local_player.get_node("Head/Camera").current = true + + $NetworkTesting/TextEdit.text = local_player.player_info.name + $NetworkTesting/ColorPickerButton.color = local_player.player_info.color func start_dedicated_server(): + role = NetworkRole.DEDICATED_SERVER peer.create_server(NET_PORT, 16) get_tree().network_peer = peer #create_player(1, true) func _on_Host_pressed(): + role = NetworkRole.SERVER $NetworkTesting/Host.disabled = true $NetworkTesting/Connect.disabled = true peer.create_server(NET_PORT, 16) get_tree().network_peer = peer create_player(1, true) + focus = GameFocus.GAME func _on_Connect_pressed(): $NetworkTesting/Host.disabled = true @@ -86,31 +119,46 @@ func _on_Connect_pressed(): peer.create_client(NET_SERVER, NET_PORT) get_tree().network_peer = peer - func _player_connected(id) -> void: print("player connected, id: ", id) create_player(id, false) - + if local_player: + local_player.rpc(&"update_info") func _player_disconnected(id) -> void: print("player disconnected, id: ", id) - func _connected_ok() -> void: print("connected to server") var id = get_tree().get_network_unique_id() create_player(id, true) + focus = GameFocus.GAME + role = NetworkRole.CLIENT func _connected_fail() -> void: print("connection to server failed") func _server_disconnected() -> void: print("server disconnected") - + + role = NetworkRole.NONE func _ready() -> void: + + print("Commandline arguments: ", OS.get_cmdline_args()) + get_tree().connect("network_peer_connected", self._player_connected) get_tree().connect("network_peer_disconnected", self._player_disconnected) get_tree().connect("connected_to_server", self._connected_ok) get_tree().connect("connection_failed", self._connected_fail) get_tree().connect("server_disconnected", self._server_disconnected) + + +func _on_TextEdit_text_submitted(new_text): + local_player.player_info.name = new_text + local_player.update_info() + + +func _on_ColorPickerButton_color_changed(color): + local_player.player_info.color = color + local_player.update_info() diff --git a/Game/Main.tscn b/Game/Main.tscn index 3ff5a9b..261a8b0 100644 --- a/Game/Main.tscn +++ b/Game/Main.tscn @@ -10,6 +10,19 @@ script = ExtResource( 3 ) [node name="HUD" parent="." instance=ExtResource( 4 )] +[node name="AnimationPlayer" parent="HUD/Crosshair" index="1"] +blend_times = [] + +[node name="ChatHistory" parent="HUD/Chat/VBoxContainer" index="0"] +custom_effects = [] +structured_text_bidi_override_options = [] + +[node name="Label" parent="HUD/Chat/VBoxContainer/Typing" index="0"] +structured_text_bidi_override_options = [] + +[node name="Editor" parent="HUD/Chat/VBoxContainer/Typing" index="1"] +structured_text_bidi_override_options = [] + [node name="GUI" parent="." instance=ExtResource( 2 )] [node name="Players" type="Node3D" parent="."] @@ -19,9 +32,10 @@ script = null transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1) [node name="NetworkTesting" type="VBoxContainer" parent="."] -anchor_bottom = 1.0 -offset_right = 100.0 -offset_bottom = -500.0 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -100.0 +offset_bottom = 132.0 script = null __meta__ = { "_edit_use_anchors_": false @@ -43,19 +57,20 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="TextEdit" type="TextEdit" parent="NetworkTesting"] +[node name="TextEdit" type="LineEdit" parent="NetworkTesting"] offset_top = 66.0 offset_right = 100.0 -offset_bottom = 96.0 +offset_bottom = 99.0 rect_min_size = Vector2(100, 30) text = "name" structured_text_bidi_override_options = [] script = null [node name="ColorPickerButton" type="ColorPickerButton" parent="NetworkTesting"] -offset_top = 100.0 +offset_top = 103.0 offset_right = 100.0 -offset_bottom = 129.0 +offset_bottom = 132.0 +edit_alpha = false script = null __meta__ = { "_edit_use_anchors_": false @@ -63,3 +78,7 @@ __meta__ = { [connection signal="pressed" from="NetworkTesting/Host" to="." method="_on_Host_pressed"] [connection signal="pressed" from="NetworkTesting/Connect" to="." method="_on_Connect_pressed"] +[connection signal="text_submitted" from="NetworkTesting/TextEdit" to="." method="_on_TextEdit_text_submitted"] +[connection signal="color_changed" from="NetworkTesting/ColorPickerButton" to="." method="_on_ColorPickerButton_color_changed"] + +[editable path="HUD"] diff --git a/Game/Map.tscn b/Game/Map.tscn index 01ffd23..b7d07fd 100644 --- a/Game/Map.tscn +++ b/Game/Map.tscn @@ -19,7 +19,6 @@ ss_reflections_enabled = true ssao_enabled = true ssao_radius = 8.0 ssao_intensity = 1.0 -sdfgi_enabled = true sdfgi_use_occlusion = true sdfgi_read_sky_light = true sdfgi_bounce_feedback = 1.24 @@ -83,7 +82,7 @@ script = null [node name="StaticBody3D" type="StaticBody3D" parent="DM1/Main" index="0"] script = null -[node name="CollisionShape3D" type="CollisionShape3D" parent="DM1/Main/StaticBody3D" index="0"] +[node name="CollisionShape3D" type="CollisionShape3D" parent="DM1/Main/StaticBody3D"] shape = SubResource( 5 ) script = null diff --git a/Game/project.godot b/Game/project.godot index e6df92d..14ea6a1 100644 --- a/Game/project.godot +++ b/Game/project.godot @@ -124,15 +124,12 @@ say_cancel={ [rendering] +environment/ssao/quality=0 anti_aliasing/screen_space_roughness_limiter/enabled=false -environment/glow/use_high_quality=true -environment/screen_space_reflection/roughness_quality=2 global_illumination/sdfgi/probe_ray_count=2 global_illumination/sdfgi/frames_to_converge=0 global_illumination/sdfgi/frames_to_update_lights=4 -anti_aliasing/quality/msaa=2 -anti_aliasing/quality/screen_space_aa=1 -anti_aliasing/quality/use_debanding=true +anti_aliasing/quality/msaa=1 occlusion_culling/use_occlusion_culling=true mesh_lod/lod_change/threshold_pixels=3.0 environment/defaults/default_environment="res://default_env.tres"