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 |