From 07387e67af9df3423257533bb2745c8bca054f84 Mon Sep 17 00:00:00 2001 From: Yogi Wiguna Date: Mon, 16 Mar 2026 12:18:00 +0800 Subject: [PATCH] feat: Implement core Player character with networking, movement, and character selection logic, along with a new pointer shader. --- assets/shaders/character_pointer.gdshader | 8 ++++++++ assets/shaders/character_pointer.gdshader.uid | 1 + scenes/player.gd | 17 +++++++++++++---- 3 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 assets/shaders/character_pointer.gdshader create mode 100644 assets/shaders/character_pointer.gdshader.uid diff --git a/assets/shaders/character_pointer.gdshader b/assets/shaders/character_pointer.gdshader new file mode 100644 index 0000000..2a397c6 --- /dev/null +++ b/assets/shaders/character_pointer.gdshader @@ -0,0 +1,8 @@ +shader_type spatial; +render_mode unshaded, blend_mix, depth_draw_opaque; + +uniform vec4 pointer_color : source_color = vec4(0.0, 1.0, 0.0, 1.0); + +void fragment() { + ALBEDO = pointer_color.rgb; + } \ No newline at end of file diff --git a/assets/shaders/character_pointer.gdshader.uid b/assets/shaders/character_pointer.gdshader.uid new file mode 100644 index 0000000..b847b0e --- /dev/null +++ b/assets/shaders/character_pointer.gdshader.uid @@ -0,0 +1 @@ +uid://kadpokx0uoai diff --git a/scenes/player.gd b/scenes/player.gd index 614b8be..a82e73a 100644 --- a/scenes/player.gd +++ b/scenes/player.gd @@ -219,13 +219,22 @@ func _ready(): $Name.text = display_name # Character Pointer Visibility - # Show only for our local player (not bots, not other players) + # Visible to all human players. Green for local player, Red for others. var pointer = get_node_or_null("CharacterPointer") if pointer: - if is_bot or is_in_group("Bots"): - pointer.visible = false + pointer.visible = true + + var pointer_shader = load("res://assets/shaders/character_pointer.gdshader") + var mat = ShaderMaterial.new() + mat.shader = pointer_shader + + if is_multiplayer_authority(): + mat.set_shader_parameter("pointer_color", Color(0.0, 1.0, 0.0, 1.0)) # Green else: - pointer.visible = is_multiplayer_authority() + mat.set_shader_parameter("pointer_color", Color(1.0, 0.0, 0.0, 1.0)) # Red + + if pointer is MeshInstance3D: + pointer.material_override = mat # Sync name to other peers if this is our local player or a bot we own if is_multiplayer_authority() and can_rpc():