aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/game.gd2
-rw-r--r--client/global.gd31
-rw-r--r--client/menu/character_menu.gd21
-rw-r--r--client/menu/main_menu.gd18
-rw-r--r--client/player/character/character.gd3
-rw-r--r--client/player/chat_bubble.tscn2
-rw-r--r--client/player/controllable_player.gd1
-rw-r--r--client/player/player.gd9
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