Implemented shell casings. Laid groundwork for separating client/server functinality and to handle a server-side player list. Fixed vignette on at start. FIxed pause menu on after startign the game. Lowered visual detail.

remotes/1705377932733043820/tmp_refs/heads/unbroken
unfa 2021-07-26 20:51:54 +02:00
parent a562929421
commit 595ff48d05
13 changed files with 193 additions and 98 deletions

View File

@ -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]
search_help=Rect2(476, 495, 960, 540)
export=Rect2(533, 181, 900, 700)
project_settings=Rect2(0, 29, 1920, 1006)
editor_settings=Rect2( 1920, 29, 1920, 1051 )
[project_settings]
advanced_mode=true
[inspector_options]
[export_options]
material_preview_on_sphere=true
default_filename="Liblast Linux"

View File

@ -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,19 +151,17 @@ 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)
@ -171,6 +172,13 @@ func _input(event) -> void:
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())

View File

@ -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 )

View File

@ -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()

View File

@ -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
}
}
}

View File

@ -11,7 +11,7 @@ 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
@ -22,8 +22,3 @@ 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"]

View File

@ -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

View File

@ -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:
@ -28,6 +29,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():
pass

View File

@ -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:
@ -66,18 +93,24 @@ func create_player(id: int, is_local: bool) -> void:
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,20 +119,21 @@ 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")
@ -107,10 +141,24 @@ func _connected_fail() -> void:
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()

View File

@ -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"]

View File

@ -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

View File

@ -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"