Skip to content

Commit

Permalink
fix restoration of hidden avatars
Browse files Browse the repository at this point in the history
  • Loading branch information
lorux0 committed Sep 13, 2024
1 parent 4fe018e commit 44b65d4
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 38 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using DCL.AvatarRendering.Loading.Assets;
using DCL.AvatarRendering.Loading.Components;
using DCL.AvatarRendering.Wearables.Helpers;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEngine;
using WearablePromise = ECS.StreamableLoading.Common.AssetPromise<DCL.AvatarRendering.Wearables.Components.WearablesResolution, DCL.AvatarRendering.Wearables.Components.Intentions.GetWearablesByPointersIntention>;
using EmotePromise = ECS.StreamableLoading.Common.AssetPromise<DCL.AvatarRendering.Emotes.EmotesResolution, DCL.AvatarRendering.Emotes.GetEmotesByPointersIntention>;
Expand All @@ -13,7 +11,7 @@ public struct AvatarShapeComponent
{
public bool IsDirty;
public bool IsVisible;
public bool HiddenByModifierArea { get; private set; }
public bool HiddenByModifierArea;

public Color SkinColor;
public Color HairColor;
Expand Down Expand Up @@ -52,11 +50,5 @@ public AvatarShapeComponent(string name, string id) : this()
InstantiatedWearables = new List<CachedAttachment>();
IsVisible = true;
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void UpdateHiddenStatus(bool hidden)
{
HiddenByModifierArea = hidden;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using DCL.AvatarRendering.AvatarShape.Components;
using DCL.AvatarRendering.AvatarShape.UnityInterface;
using DCL.CharacterTriggerArea.Components;
using DCL.CharacterTriggerArea.Systems;
using DCL.Diagnostics;
using DCL.ECSComponents;
using DCL.Multiplayer.Connections.Typing;
Expand Down Expand Up @@ -43,6 +42,20 @@ protected override void Update(float t)
HandleComponentRemovalQuery(World!);
}

public void FinalizeComponents(in Query query)
{
ResetAffectedEntitiesQuery(World!);
}

[Query]
private void ResetAffectedEntities(in Entity entity, ref CharacterTriggerAreaComponent triggerAreaComponent, ref AvatarModifierAreaComponent modifierComponent)
{
foreach (Transform avatarTransform in triggerAreaComponent.CurrentAvatarsInside)
ShowAvatar(avatarTransform);

World!.Remove<AvatarModifierAreaComponent>(entity);
}

[Query]
[None(typeof(CharacterTriggerAreaComponent), typeof(AvatarModifierAreaComponent))]
[All(typeof(TransformComponent))]
Expand All @@ -65,13 +78,18 @@ private void UpdateAvatarModifierArea(ref PBAvatarModifierArea pbAvatarModifierA
modifierAreaComponent.SetExcludedIds(pbAvatarModifierArea.ExcludeIds!);

// Update effect on now excluded/non-excluded avatars
foreach (Transform avatarTransform in triggerAreaComponent.CurrentAvatarsInside) { CorrectAvatarHidingState(avatarTransform, modifierAreaComponent.ExcludedIds); }
foreach (Transform avatarTransform in triggerAreaComponent.CurrentAvatarsInside)
HideAvatar(avatarTransform, modifierAreaComponent.ExcludedIds);
}

foreach (Transform avatarTransform in triggerAreaComponent.ExitedAvatarsToBeProcessed) { ToggleAvatarHiding(avatarTransform, false, modifierAreaComponent.ExcludedIds); }
foreach (Transform avatarTransform in triggerAreaComponent.ExitedAvatarsToBeProcessed)
ShowAvatar(avatarTransform);

triggerAreaComponent.TryClearExitedAvatarsToBeProcessed();

foreach (Transform avatarTransform in triggerAreaComponent.EnteredAvatarsToBeProcessed) { ToggleAvatarHiding(avatarTransform, true, modifierAreaComponent.ExcludedIds); }
foreach (Transform avatarTransform in triggerAreaComponent.EnteredAvatarsToBeProcessed)
HideAvatar(avatarTransform, modifierAreaComponent.ExcludedIds);

triggerAreaComponent.TryClearEnteredAvatarsToBeProcessed();
}

Expand All @@ -80,7 +98,8 @@ private void UpdateAvatarModifierArea(ref PBAvatarModifierArea pbAvatarModifierA
private void HandleEntityDestruction(ref CharacterTriggerAreaComponent triggerAreaComponent, ref AvatarModifierAreaComponent modifierComponent)
{
// Reset state of affected entities
foreach (Transform avatarTransform in triggerAreaComponent.CurrentAvatarsInside) { ToggleAvatarHiding(avatarTransform, false, modifierComponent.ExcludedIds); }
foreach (Transform avatarTransform in triggerAreaComponent.CurrentAvatarsInside)
ShowAvatar(avatarTransform);

modifierComponent.Dispose();
}
Expand All @@ -91,48 +110,40 @@ private void HandleComponentRemoval(Entity e, ref CharacterTriggerAreaComponent
{
// Reset state of affected entities
foreach (Transform avatarTransform in triggerAreaComponent.CurrentAvatarsInside)
ToggleAvatarHiding(avatarTransform, false, modifierComponent.ExcludedIds);
ShowAvatar(avatarTransform);

modifierComponent.Dispose();

World!.Remove<AvatarModifierAreaComponent>(e);
}

internal void ToggleAvatarHiding(Transform avatarTransform, bool shouldHide, HashSet<string> excludedIds)
private void ShowAvatar(Transform avatarTransform)
{
var result = findAvatarQuery.AvatarWithTransform(avatarTransform);
if (!result.Success) return;

var entity = result.Result;

if (globalWorld.TryGet(entity, out Profile? profile) && excludedIds.Contains(profile!.UserId)) return;
globalWorld.Get<AvatarShapeComponent>(entity).UpdateHiddenStatus(shouldHide);
ref AvatarShapeComponent avatarShape = ref globalWorld.TryGetRef<AvatarShapeComponent>(entity, out bool hasAvatarShape);
if (!hasAvatarShape) return;

avatarShape.HiddenByModifierArea = false;
}

internal void CorrectAvatarHidingState(Transform avatarTransform, HashSet<string> excludedIds)
private void HideAvatar(Transform avatarTransform, HashSet<string> excludedIds)
{
var result = findAvatarQuery.AvatarWithTransform(avatarTransform);
if (!result.Success) return;

var entity = result.Result;

if (globalWorld.TryGet(entity, out Profile? profile))
globalWorld.Get<AvatarShapeComponent>(entity).UpdateHiddenStatus(excludedIds.Contains(profile!.UserId) == false);
}

[Query]
private void FinalizeComponents(in Entity entity, ref CharacterTriggerAreaComponent triggerAreaComponent, ref AvatarModifierAreaComponent modifierComponent)
{
// Reset state of affected entities
foreach (Transform avatarTransform in triggerAreaComponent.CurrentAvatarsInside)
ToggleAvatarHiding(avatarTransform, false, modifierComponent.ExcludedIds);
if (!globalWorld.TryGet(entity, out Profile? profile)) return;

World!.Remove<AvatarModifierAreaComponent>(entity);
}
ref AvatarShapeComponent avatarShape = ref globalWorld.TryGetRef<AvatarShapeComponent>(entity, out bool hasAvatarShape);
if (!hasAvatarShape) return;

public void FinalizeComponents(in Query query)
{
FinalizeComponentsQuery(World!);
bool shouldHide = !excludedIds.Contains(profile!.UserId);
avatarShape.HiddenByModifierArea = shouldHide;
}

private class FindAvatarQuery
Expand Down Expand Up @@ -163,7 +174,8 @@ public LightResult<Entity> AvatarWithTransform(Transform avatarTransform)
private void FindEntity(Entity entity)
{
if (foundedEntityOrNull != Entity.Null) return;
if (globalWorld.Get<AvatarBase>(entity).transform.parent == requiredTransform) foundedEntityOrNull = entity;
if (globalWorld.Get<AvatarBase>(entity).transform.parent != requiredTransform) return;
foundedEntityOrNull = entity;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,11 +200,13 @@ public void ToggleHidingFlagCorrectly()

world.Add(fakeAvatarEntity, new AvatarShapeComponent());

system.ToggleAvatarHiding(fakeAvatarShapeTransform, true, excludedIds);
system.Update(0f);
// system.ShowAvatar(fakeAvatarShapeTransform, true, excludedIds);

Assert.IsTrue(globalWorld.Get<AvatarShapeComponent>(fakeAvatarEntity).HiddenByModifierArea);

system.ToggleAvatarHiding(fakeAvatarShapeTransform, false, excludedIds);
system.Update(0f);
// system.ShowAvatar(fakeAvatarShapeTransform, false, excludedIds);

Assert.IsFalse(globalWorld.Get<AvatarShapeComponent>(fakeAvatarEntity).HiddenByModifierArea);
}
Expand All @@ -224,7 +226,8 @@ public void FilterByExcludedIds()
var excludedIds = new HashSet<string>();
excludedIds.Add(FAKE_USER_ID);

system.ToggleAvatarHiding(fakeAvatarShapeTransform, true, excludedIds);
system.Update(0f);
// system.ShowAvatar(fakeAvatarShapeTransform, true, excludedIds);

Assert.IsFalse(globalWorld.Get<AvatarShapeComponent>(fakeAvatarEntity).HiddenByModifierArea);
}
Expand Down

0 comments on commit 44b65d4

Please sign in to comment.