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