Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
0febcf5
test publishing to voice chat
popuz Mar 3, 2026
94ed488
add ADR, PLAN and chat Summary
popuz Mar 3, 2026
1540ede
Merge remote-tracking branch 'refs/remotes/origin/dev' into feat/prox…
popuz Mar 4, 2026
6078826
add more .md files, remove duplication and point to skills/docs asap
popuz Mar 4, 2026
0bf8687
.meta files
popuz Mar 4, 2026
0c83d82
removed duplication for code style
popuz Mar 4, 2026
f6451d0
Merge remote-tracking branch 'origin/dev' into feat/proximity-voice-chat
popuz Mar 4, 2026
c756ed2
replaced Test by Manager
popuz Mar 4, 2026
3982bdd
use local test mic
popuz Mar 4, 2026
295e76d
add round trip check
popuz Mar 4, 2026
b55d836
small renaming
popuz Mar 4, 2026
3563429
made source spatial
popuz Mar 4, 2026
8b07556
proximity voice chat working
popuz Mar 4, 2026
e506f2d
config from SO
popuz Mar 4, 2026
1189a83
add debug panel
popuz Mar 4, 2026
d884da6
add rolloff to config
popuz Mar 5, 2026
731435a
Merge remote-tracking branch 'refs/remotes/origin/dev' into feat/prox…
popuz Mar 5, 2026
59bc121
Merge branch 'dev' into feat/proximity-voice-chat
popuz Mar 6, 2026
69dcb61
added plan and ADR
popuz Mar 6, 2026
d001705
spatial solved but with artifacts
popuz Mar 6, 2026
fba196a
add documentation
popuz Mar 6, 2026
13b2465
update docs
popuz Mar 6, 2026
0316993
pointed to local LiveKit repo. Removed Feeder
popuz Mar 6, 2026
e373fc5
test pan calculation
popuz Mar 9, 2026
3f31e09
updated plan for Pan task
popuz Mar 9, 2026
a1ae086
simple ILD with back fix
popuz Mar 10, 2026
dd363c7
обновил доки
popuz Mar 10, 2026
0724519
updated docs
popuz Mar 10, 2026
761f23a
updated docs
popuz Mar 10, 2026
565f733
add proper positioning of the AudioSource
popuz Mar 11, 2026
3b3f758
Merge branch 'dev' into feat/proximity-voice-chat
popuz Mar 12, 2026
95de60f
Merge remote-tracking branch 'origin/feat/proximity-voice-chat' into …
popuz Mar 12, 2026
9d775b2
pointed to proper packages
popuz Mar 12, 2026
13195c2
adjust configs
popuz Mar 12, 2026
f303ddc
pointed to proper commit
popuz Mar 12, 2026
7d38e27
start on LipSync
popuz Mar 12, 2026
f01492f
updated docs
popuz Mar 12, 2026
e64927b
lip sync first iteration
popuz Mar 12, 2026
bce809a
update docs
popuz Mar 12, 2026
06d305b
lipSync via amplitude
popuz Mar 12, 2026
8c9e235
add simple spectral cuttoffs for lipSync
popuz Mar 12, 2026
efc0e67
add FFT 3 bands lipSync
popuz Mar 12, 2026
66f9959
clear the buffer array to solve ITD artifacts
popuz Mar 12, 2026
65c7e7a
updated docs and packages
popuz Mar 13, 2026
d02bed6
docs for audio-effect-zones
popuz Mar 13, 2026
4a2d735
add handling proto for audio effct zones
popuz Mar 13, 2026
ecb7696
update docs
popuz Mar 17, 2026
85a5b4e
Merge remote-tracking branch 'refs/remotes/origin/dev' into feat/prox…
popuz Mar 17, 2026
2f2924c
update with last LiveKit state
popuz Mar 17, 2026
a557dba
hard temp fix for component id clash
popuz Mar 17, 2026
f743133
Merge branch 'dev' into feat/proximity-voice-chat
popuz Mar 17, 2026
d864ce0
silence zone working PoC
popuz Mar 17, 2026
21ea167
wip on mic effect
popuz Mar 17, 2026
0c1a561
fixed mic effect
popuz Mar 17, 2026
b06f6ee
set separate channel for Mixer for this chat
popuz Mar 18, 2026
83bab80
Merge remote-tracking branch 'origin/feat/proximity-voice-chat' into …
popuz Mar 18, 2026
0e95cd8
updated protocol with more areas
popuz Mar 18, 2026
3e44b91
Merge branch 'dev' into feat/proximity-voice-chat
popuz Mar 18, 2026
f11c4b1
set Unity scene to localhost for testing
popuz Mar 18, 2026
4a4b7cf
Merge remote-tracking branch 'origin/feat/proximity-voice-chat' into …
popuz Mar 18, 2026
4cf4932
extending zones
popuz Mar 18, 2026
15e1491
updated setup for new effect cases
popuz Mar 18, 2026
00b810f
add amplification
popuz Mar 18, 2026
3732571
add reverb area handling
popuz Mar 18, 2026
7bda0f2
add echo handling
popuz Mar 18, 2026
0e337a9
fixed reverb effect handling via respective mixer group
popuz Mar 19, 2026
46b3792
disabled ITD and HRTF by default
popuz Mar 19, 2026
c48354f
updated docs with analysis
popuz Mar 19, 2026
0f66faf
split Proximity system in SRP
popuz Mar 19, 2026
73b8f7f
supression on Community and Private chat calls
popuz Mar 19, 2026
208f145
speaking person update in the nametag
popuz Mar 19, 2026
fa2d3e9
add microphone switching management
popuz Mar 19, 2026
d6940f8
add Mac OS guard
popuz Mar 19, 2026
e0f554d
add re-conncetion
popuz Mar 19, 2026
e3cc8da
made Silence, Reverb and Echo zones affects only Player
popuz Mar 19, 2026
e1979e2
add local mute functionality
popuz Mar 20, 2026
9bfe815
add handling on nametags tag for local player
popuz Mar 20, 2026
36fced8
Merge branch 'dev' into feat/proximity-voice-chat
popuz Mar 20, 2026
a4ca7db
add nametag for hushed state
popuz Mar 20, 2026
e46d410
Merge remote-tracking branch 'origin/feat/proximity-voice-chat' into …
popuz Mar 20, 2026
0aae2d6
fixed default scene realm
popuz Mar 23, 2026
9093b3e
Merge branch 'dev' into feat/proximity-voice-chat
popuz Mar 23, 2026
2ba6ef1
add main buttons assets
popuz Mar 24, 2026
0012dce
add sidebar script
popuz Mar 24, 2026
1079316
fixed compile issues (when package is embedded)
popuz Mar 24, 2026
93e098d
assembled sidebar button
popuz Mar 24, 2026
888e211
extracted prefab variant
popuz Mar 24, 2026
7498d93
extracted prefab variant
popuz Mar 24, 2026
f5c4621
setup tooltip text
popuz Mar 24, 2026
2285359
made a panel inside
popuz Mar 24, 2026
5bcfbfe
add docs for BE
popuz Mar 24, 2026
b5fad71
wip on sidebar UI panel
popuz Mar 24, 2026
61056d2
Merge branch 'dev' into feat/proximity-voice-chat
popuz Mar 24, 2026
68ed860
mute/unmute integration with the BE
popuz Mar 24, 2026
11ec9e1
add assembly rules to main Claude file
popuz Mar 24, 2026
0dedb66
updated docs
popuz Mar 24, 2026
2cd5e1d
add 2 tests
popuz Mar 24, 2026
02f33cf
fixed tests
popuz Mar 24, 2026
e31287a
Merge remote-tracking branch 'origin/feat/proximity-voice-chat' into …
popuz Mar 25, 2026
09b7946
add endpoint tests
popuz Mar 25, 2026
247981c
working BE integration (with error on return)
popuz Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,18 @@ Before writing or modifying any code, follow the code-standards skill for naming

### 10. **Testing Systems**

* Use `UnitySystemTestBase<T>` for world lifecycle in tests.
* **Before writing any tests**, read [`docs/testing-guide.md`](docs/testing-guide.md) for full conventions.
* Use `UnitySystemTestBase<T>` for world lifecycle in ECS system tests.
* Expose system constructors via `[InternalsVisibleTo]`.
* Use NUnit + NSubstitute.

### 11. **Assembly Rules**

* **Tests** → always `.asmref` pointing to `DCL.EditMode.Tests` (`GUID:da80994a355e49d5b84f91c0a84a721f`), never a new `.asmdef`.
* **New code** → `.asmref` to the parent assembly. Only create a new `.asmdef` if the code **must be referenced by other assemblies**.
* **ECS Systems** → `.asmref` pointing to `DCL.Plugins`.
* See [`docs/directories-and-assemblies-structure.md`](docs/directories-and-assemblies-structure.md) for full details.

---

### Specific Notes
Expand Down
1 change: 1 addition & 0 deletions Explorer/Assets/DCL/Audio/AudioMixerVolumesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public enum AudioMixerExposedParam
UI_Volume,
World_Volume,
VoiceChat_Volume,
ProximityVoiceChat_Volume,
Microphone_Volume
}

Expand Down
91 changes: 90 additions & 1 deletion Explorer/Assets/DCL/Audio/Prefabs/GeneralAudioMixer.mixer
Original file line number Diff line number Diff line change
Expand Up @@ -161,12 +161,22 @@ AudioMixerController:
name: Microphone_Volume
- guid: 2ae382bb957ecd041acc0173f112a35f
name: Music_Volume
- guid: 62be0924fc021d348ba4b81f3129d674
name: ProximityVoiceChat_Volume
- guid: c9c5e54dc8ac54249b005398529cf040
name: ProximityChat.Reverb_Room
- guid: fd3b552488aaab7409645293529927bf
name: ProximityChat.Reverb_DecayTime
- guid: d51ec3f57a35da24eaee28e9d0433f7f
name: ProximityChat.Reverb_HFRatio
- guid: aa94afff7f3a3c547b715ba6b1477eeb
name: UI_Volume
- guid: 356c59c6149334c7ab06612e531fbcee
name: VoiceChat_Volume
- guid: 41896c455d9a1ae4aa309cc74ca710d0
name: World_Volume
- guid: 45d092b857a20434d9dbc244e0555d3c
name: MyExposedParam 3
m_AudioMixerGroupViews:
- guids:
- d399104d191ffa44593c071d544e1ad5
Expand All @@ -177,9 +187,10 @@ AudioMixerController:
- a32d7ad83736a4eb3a9a081b492fddce
- c2137a4f6e006924baaa51373fc64a8e
- 175baccac9bea1647a3146e4a42fd6d4
- 871cbae600ef66242800ec4ebc6981e2
name: View
m_CurrentViewIndex: 0
m_TargetSnapshot: {fileID: -1473976123031914414}
m_TargetSnapshot: {fileID: 24500006}
--- !u!243 &24300002
AudioMixerGroupController:
m_ObjectHideFlags: 0
Expand All @@ -195,6 +206,7 @@ AudioMixerGroupController:
- {fileID: -3414157981442100215}
- {fileID: 2832862654527898687}
- {fileID: -2191859670193011288}
- {fileID: 5332904453353020933}
- {fileID: 4705557717073340048}
- {fileID: 942131879273118127}
m_Volume: 856382ba013d5eb468afa9f4a06fb492
Expand Down Expand Up @@ -238,6 +250,7 @@ AudioMixerSnapshotController:
0b354bdbe2d8f244ebde89156a204529: 6.2251854
14e687fbe3369e84aa344f7b84c94f83: 30
1b0ec37c29383604989f6b050ac50534: 4000
df786edcfa726304a976073639c2066a: 0
98b1304d7c589f64992bacd2cb762010: 100000
aa94afff7f3a3c547b715ba6b1477eeb: 0
m_TransitionOverrides:
Expand Down Expand Up @@ -278,6 +291,20 @@ AudioMixerEffectController:
m_SendTarget: {fileID: 0}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!244 &1550876749232705066
AudioMixerEffectController:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_EffectID: 8a23443b690684342ab055294ce0c15a
m_EffectName: Attenuation
m_MixLevel: 6dd2a78be8ba9694ba1c61699c90343e
m_Parameters: []
m_SendTarget: {fileID: 0}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!243 &2832862654527898687
AudioMixerGroupController:
m_ObjectHideFlags: 0
Expand Down Expand Up @@ -316,6 +343,26 @@ AudioMixerGroupController:
m_Mute: 0
m_Solo: 0
m_BypassEffects: 0
--- !u!243 &5332904453353020933
AudioMixerGroupController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: ProximityVoiceChat
m_AudioMixer: {fileID: 24100000}
m_GroupID: 871cbae600ef66242800ec4ebc6981e2
m_Children: []
m_Volume: 62be0924fc021d348ba4b81f3129d674
m_Pitch: 3fa2bc7bc4afce945a9791021f041d95
m_Send: 00000000000000000000000000000000
m_Effects:
- {fileID: 1550876749232705066}
- {fileID: 6973592797401163415}
m_UserColorIndex: 8
m_Mute: 0
m_Solo: 0
m_BypassEffects: 0
--- !u!244 &5387003673831198533
AudioMixerEffectController:
m_ObjectHideFlags: 3
Expand Down Expand Up @@ -344,6 +391,48 @@ AudioMixerEffectController:
m_SendTarget: {fileID: 0}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!244 &6973592797401163415
AudioMixerEffectController:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_EffectID: 7f3de3d5e0f948f4a971c03af2816f2f
m_EffectName: SFX Reverb
m_MixLevel: 45d092b857a20434d9dbc244e0555d3c
m_Parameters:
- m_ParameterName: Dry Level
m_GUID: df786edcfa726304a976073639c2066a
- m_ParameterName: Room
m_GUID: c9c5e54dc8ac54249b005398529cf040
- m_ParameterName: Room HF
m_GUID: d3dc2aa27ca2b0b4f983f3a5021ba4a6
- m_ParameterName: Decay Time
m_GUID: fd3b552488aaab7409645293529927bf
- m_ParameterName: Decay HF Ratio
m_GUID: d51ec3f57a35da24eaee28e9d0433f7f
- m_ParameterName: Reflections
m_GUID: e92db69fffd22374d903cbcc8040d281
- m_ParameterName: Reflect Delay
m_GUID: 5f228e4c341add343a39a77f5bbab10c
- m_ParameterName: Reverb
m_GUID: 329c6969f0ca2dd4184c2c8b35f846c8
- m_ParameterName: Reverb Delay
m_GUID: d6af321ee2e997f4c83a6f762651f1be
- m_ParameterName: Diffusion
m_GUID: 8880a3ffdbeadec49827e56e58c638e0
- m_ParameterName: Density
m_GUID: e129e6afe75fb554aa86c4e313d68855
- m_ParameterName: HF Reference
m_GUID: 0e6088e0cde46bc4a94b3342ca2a3909
- m_ParameterName: Room LF
m_GUID: 2ea0e74e82ae42242b1337d252004dd5
- m_ParameterName: LF Reference
m_GUID: d865618b4f1ee7346acd8a5f5cf4bf52
m_SendTarget: {fileID: 0}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!244 &8195869976146750147
AudioMixerEffectController:
m_ObjectHideFlags: 3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,20 @@ public static LightResult<AvatarBase> AvatarWithID(World globalWorld, string id,
: new LightResult<AvatarBase>(foundEntity!);
}

public static bool TryGetAvatarEntity(World globalWorld, Transform transform, out Entity entity)
{
var result = AvatarWithTransform(globalWorld, transform);

if (result.Success)
{
entity = result.Result;
return true;
}

entity = Entity.Null;
return false;
}

public static LightResult<Entity> AvatarWithTransform(World globalWorld, Transform avatarTransform)
{
AssertMainThread();
Expand Down
8 changes: 8 additions & 0 deletions Explorer/Assets/DCL/Editor/ApiEndpointTests.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
using System.Text;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;

namespace DCL.Editor.ApiEndpointTests
{
/// <summary>
/// Health-check for Social Service User Mutes API.
/// No authentication required — tests endpoint availability only.
/// 401 = endpoint exists (auth required), 404 = not deployed, connection error = server down.
/// </summary>
public static class SocialServiceMutesEndpointTest
{
private const string ZONE_URL = "https://social-api.decentraland.zone/v1/mutes";
private const string ORG_URL = "https://social-api.decentraland.org/v1/mutes";
private const string MENU = "Decentraland/API Endpoint Tests/Social Service/User Mutes/";
private const string DUMMY_BODY = "{\"muted_address\": \"0x0000000000000000000000000000000000000000\"}";

[MenuItem(MENU + "GET (zone)")]
private static void GetZone() => Send(ZONE_URL, "GET");

[MenuItem(MENU + "GET (org)")]
private static void GetOrg() => Send(ORG_URL, "GET");

[MenuItem(MENU + "POST (zone)")]
private static void PostZone() => Send(ZONE_URL, "POST", DUMMY_BODY);

[MenuItem(MENU + "POST (org)")]
private static void PostOrg() => Send(ORG_URL, "POST", DUMMY_BODY);

[MenuItem(MENU + "DELETE (zone)")]
private static void DeleteZone() => Send(ZONE_URL, "DELETE", DUMMY_BODY);

[MenuItem(MENU + "DELETE (org)")]
private static void DeleteOrg() => Send(ORG_URL, "DELETE", DUMMY_BODY);

private static void Send(string url, string method, string jsonBody = null)
{
Debug.Log($"[API Test] {method} {url} — sending...");

var request = new UnityWebRequest(url, method);
request.downloadHandler = new DownloadHandlerBuffer();

if (jsonBody != null)
{
byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonBody);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
request.SetRequestHeader("Content-Type", "application/json");
}

UnityWebRequestAsyncOperation operation = request.SendWebRequest();

void PollResult()
{
if (!operation.isDone) return;

EditorApplication.update -= PollResult;
LogResult(method, url, request);
request.Dispose();
}

EditorApplication.update += PollResult;
}

private static void LogResult(string method, string url, UnityWebRequest request)
{
string responseBody = request.downloadHandler?.text ?? "";
long code = request.responseCode;

if (request.result == UnityWebRequest.Result.ConnectionError)
{
Debug.LogError($"[API Test] {method} {url}\n FAIL — Connection error: {request.error}\n Backend is DOWN or unreachable");
return;
}

if (code == 404)
{
Debug.LogError($"[API Test] {method} {url}\n FAIL — 404 Not Found: endpoint NOT deployed\n {responseBody}");
return;
}

if (code >= 200 && code < 500)
Debug.Log($"[API Test] {method} {url}\n OK — {code}: backend is alive\n {responseBody}");
else
Debug.LogWarning($"[API Test] {method} {url}\n WARN — {code}: unexpected status\n {responseBody}");
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Arch.SystemGroups.DefaultSystemGroups;
using Arch.SystemGroups.UnityBridge;
using DCL.Optimization.Pools;
using TimeProvider = Arch.SystemGroups.UnityBridge.TimeProvider;
using DCL.Optimization.ThreadSafePool;
using System;
using System.Collections.Generic;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

using ECS.Unity.Transforms.Components;
using System;
using TimeProvider = Arch.SystemGroups.UnityBridge.TimeProvider;


namespace ECS.Unity.Transforms.Systems
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ public static ComponentsContainer Create()
.Add(SDKComponentBuilder<PBAnimator>.Create(ComponentID.ANIMATOR).AsProtobufComponent())
.Add(SDKComponentBuilder<PBCameraModeArea>.Create(ComponentID.CAMERA_MODE_AREA).AsProtobufComponent())
.Add(SDKComponentBuilder<PBAvatarModifierArea>.Create(ComponentID.AVATAR_MODIFIER_AREA).AsProtobufComponent())
.Add(SDKComponentBuilder<PBAudioEffectZone>.Create(ComponentID.AUDIO_EFFECT_ZONE).AsProtobufComponent())
.Add(SDKComponentBuilder<PBPlayerIdentityData>.Create(ComponentID.PLAYER_IDENTITY_DATA).AsProtobufComponent())
.Add(SDKComponentBuilder<PBAvatarBase>.Create(ComponentID.AVATAR_BASE).AsProtobufComponent())
.Add(SDKComponentBuilder<PBAvatarEquippedData>.Create(ComponentID.AVATAR_EQUIPPED_DATA).AsProtobufComponent())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
using DCL.Utilities;
using DCL.Utilities.Extensions;
using DCL.VoiceChat;
using DCL.VoiceChat.MutePersistence;
using DCL.Web3.Identities;
using DCL.WebRequests.Analytics;
using ECS.Prioritization.Components;
Expand Down Expand Up @@ -673,6 +674,12 @@ await MapRendererContainer

var passportBridge = new MVCPassportBridge(mvcManager);

var proximityMuteCache = new ProximityMuteCache();
var proximityMuteRepository = new RestProximityMuteRepository(
staticContainer.WebRequestsContainer.WebRequestController,
bootstrapContainer.DecentralandUrlsSource);
var proximityMuteService = new ProximityMuteService(proximityMuteCache, proximityMuteRepository);

IMVCManagerMenusAccessFacade menusAccessFacade = new MVCManagerMenusAccessFacade(
mvcManager,
profileCache,
Expand All @@ -690,7 +697,8 @@ await MapRendererContainer
voiceChatContainer.VoiceChatOrchestrator,
includeCommunities,
communitiesDataProvider,
bootstrapContainer.DecentralandUrlsSource);
bootstrapContainer.DecentralandUrlsSource,
proximityMuteService);

ViewDependencies.Initialize(new ViewDependencies(
unityEventSystem,
Expand Down Expand Up @@ -1083,7 +1091,9 @@ await MapRendererContainer
staticContainer.ImageControllerProvider,
assetsProvisioner,
chatSharedAreaEventBus,
debugBuilder)
debugBuilder,
proximityMuteService,
identityCache)
);

if (!appArgs.HasDebugFlag() || !appArgs.HasFlagWithValueFalse(AppArgsFlags.LANDSCAPE_TERRAIN_ENABLED))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ MonoBehaviour:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
VoiceChatConfiguration: {fileID: 11400000, guid: 96f7b8dc6c27e3047a1b56bcf3779c47, type: 2}
- rid: 4753057106328551425
type: {class: SceneUIPlugin/Settings, ns: DCL.PluginSystem.World, asm: DCL.Plugins}
data:
Expand Down
Loading
Loading