diff options
| -rw-r--r-- | client/game.gd | 2 | ||||
| -rw-r--r-- | client/global.gd | 31 | ||||
| -rw-r--r-- | client/menu/character_menu.gd | 21 | ||||
| -rw-r--r-- | client/menu/main_menu.gd | 18 | ||||
| -rw-r--r-- | client/player/character/character.gd | 3 | ||||
| -rw-r--r-- | client/player/chat_bubble.tscn | 2 | ||||
| -rw-r--r-- | client/player/controllable_player.gd | 1 | ||||
| -rw-r--r-- | client/player/player.gd | 9 | 
8 files changed, 55 insertions, 32 deletions
| diff --git a/client/game.gd b/client/game.gd index 16522706..3ee960f7 100644 --- a/client/game.gd +++ b/client/game.gd @@ -154,7 +154,7 @@ func _ready():  		p.bubble.set_text(item_names[item])  	) -	mp.send_join(Global.username, Global.character) +	mp.send_join(Global.settings["username"], Global.settings["character"])  func _process(delta):  	marker.position = lerp(marker.position, marker_target, delta * 40.0) diff --git a/client/global.gd b/client/global.gd index 02989b19..a09f8696 100644 --- a/client/global.gd +++ b/client/global.gd @@ -1,29 +1,36 @@  extends Node +const DEFAULT_SETTINGS := { +	"username": "Giovanni", +	"character": 0, +	"last_server_url": "" +} + +var settings := DEFAULT_SETTINGS.duplicate(true) +  var server_url = ""  var error_message = "" -var character = 1 -var username = "Giovanni" -  func _ready():  	load_profile()  func save_profile(): -	print("Save profile")  	var f = FileAccess.open("user://profile", FileAccess.WRITE) -	f.store_line(JSON.stringify({ -		"username": username, -		"character": character -	})) +	f.store_var(settings.duplicate(true)) +	 +	print("Saved settings: ", settings)  func load_profile():  	# TOCTOU here. Godot docs says its fine.  	if not FileAccess.file_exists("user://profile"):  		print("Skip profile load")  		return -	print("Load profile")  	var f = FileAccess.open("user://profile", FileAccess.READ) -	var ob = JSON.parse_string(f.get_line()) -	username = ob["username"] -	character = ob["character"] +	settings = f.get_var() +	 +	# Add missing keys +	for k in DEFAULT_SETTINGS.keys(): +		if !settings.has(k): +			settings[k] = DEFAULT_SETTINGS[k] +	 +	print("Loaded settings: ", settings) diff --git a/client/menu/character_menu.gd b/client/menu/character_menu.gd index e63243e1..f4b878be 100644 --- a/client/menu/character_menu.gd +++ b/client/menu/character_menu.gd @@ -18,25 +18,22 @@ extends Control  @onready var character: Character = $Character  @onready var num_hairstyles := character.hairstyles.keys().size() -var hairstyle := 0 -  func _ready(): -	$VBoxContainer/top_panel/a/username.text = Global.username - -func _notification(what): -	if what == NOTIFICATION_PREDELETE: -		Global.save_profile() +	$VBoxContainer/top_panel/a/username.text = Global.settings["username"] +	character.select_hairstyle(Global.settings["character"])  func _on_back_pressed():  	$SceneTransition.transition_to("res://menu/main_menu.tscn")  func _on_username_text_changed(new_text): -	Global.username = new_text +	Global.settings["username"] = new_text  func _on_character_back_pressed(): -	hairstyle = (hairstyle - 1) % num_hairstyles -	character.select_hairstyle(hairstyle) +	Global.settings["character"] = (Global.settings["character"] - 1) % num_hairstyles +	character.select_hairstyle(Global.settings["character"]) +	Global.save_profile()  func _on_character_forward_pressed(): -	hairstyle = (hairstyle + 1) % num_hairstyles -	character.select_hairstyle(hairstyle) +	Global.settings["character"] = (Global.settings["character"] + 1) % num_hairstyles +	character.select_hairstyle(Global.settings["character"]) +	Global.save_profile() diff --git a/client/menu/main_menu.gd b/client/menu/main_menu.gd index 99fe1858..31ca5462 100644 --- a/client/menu/main_menu.gd +++ b/client/menu/main_menu.gd @@ -16,22 +16,28 @@  #  extends Control +@onready var transition = $SceneTransition  @onready var quick_connect = $side/margin/options/quick_connect  @onready var quit_button = $side/margin/options/quit +@onready var connect_uri = $side/margin/options/connect/uri  func _ready():  	quick_connect.grab_focus()  	if OS.has_feature("web"):  		quit_button.hide() +	connect_uri.text = Global.settings["last_server_url"]  func _on_quit_pressed(): -	$SceneTransition.quit() +	transition.quit()  func _on_credits_pressed(): -	$SceneTransition.transition_to("res://menu/credits_menu.tscn") +	transition.transition_to("res://menu/credits_menu.tscn")  func _on_connect_pressed(): -	connect_to($side/margin/options/connect/uri.text) +	var url = $side/margin/options/connect/uri.text +	Global.settings["last_server_url"] = url +	Global.save_profile() +	connect_to(url)  func _on_quick_connect_pressed():  	if OS.has_feature("JavaScript"): @@ -46,10 +52,10 @@ func _on_quick_connect_pressed():  func connect_to(url):  	print("Connecting to %s" % url)  	Global.server_url = url -	$SceneTransition.transition_to("res://game.tscn") +	transition.transition_to("res://game.tscn")  func _on_change_character_pressed(): -	$SceneTransition.transition_to("res://menu/character_menu.tscn") +	transition.transition_to("res://menu/character_menu.tscn")  func _on_settings_pressed(): -	$SceneTransition.transition_to("res://menu/settings_menu.tscn") +	transition.transition_to("res://menu/settings_menu.tscn") diff --git a/client/player/character/character.gd b/client/player/character/character.gd index c6ca9b50..820cba74 100644 --- a/client/player/character/character.gd +++ b/client/player/character/character.gd @@ -60,6 +60,9 @@ func _process(delta):  		play_animation(next_animation)  func select_hairstyle(id: int): +	if id < 0: +		id *= -1 # TODO: Select customer character +	id = id % hairstyles.keys().size()  	var target = hairstyles.keys()[id]  	for k in hairstyles.keys():  		if k == target: diff --git a/client/player/chat_bubble.tscn b/client/player/chat_bubble.tscn index 1a5f7dfc..34b20f93 100644 --- a/client/player/chat_bubble.tscn +++ b/client/player/chat_bubble.tscn @@ -12,6 +12,8 @@ viewport_path = NodePath("SubViewport")  [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5iy0t"]  resource_local_to_scene = true  transparency = 1 +no_depth_test = true +shading_mode = 0  albedo_texture = SubResource("ViewportTexture_mko8a")  billboard_mode = 2 diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index c4691b67..903f22c7 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -34,6 +34,7 @@ func _ready():  	timer.connect("timeout", func():  		game.mp.send_position(position_, rotation_)  	) +	super()  func _process(delta):  	var input = Vector2(Input.get_axis("left", "right"), Input.get_axis("forward", "backwards")).normalized() diff --git a/client/player/player.gd b/client/player/player.gd index 4a5cfa6a..4806b19d 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -32,12 +32,13 @@ var bubble: ChatBubble = preload("res://player/chat_bubble.tscn").instantiate()  var hand: Item = null  var hand_base: Node3D = Node3D.new() +var character_idx: int  var _anim_angle: float = 0.0  const HAND_BASE_POSITION: Vector3 = Vector3(0, .25, .4) -func _init(_id: int, new_name: String, pos: Vector2, _character: int, new_game: Game): +func _init(_id: int, new_name: String, pos: Vector2, new_character_idx: int, new_game: Game):  	add_child(character)  	position_ = pos  	name = new_name @@ -47,6 +48,12 @@ func _init(_id: int, new_name: String, pos: Vector2, _character: int, new_game:  	add_child(hand_base)  	add_child(bubble) +	 +	character_idx = new_character_idx +	 + +func _ready(): +	character.select_hairstyle(character_idx)  func update_position(new_position: Vector2, new_rotation: float):  	position_ = new_position | 
