Character editor flicker fix (#7002)

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
Leeroy
2022-03-28 11:31:23 +03:00
committed by GitHub
parent 435af224c8
commit bd12fae93a

View File

@@ -79,9 +79,15 @@ namespace Content.Client.Preferences.UI
private readonly List<SpeciesPrototype> _speciesList; private readonly List<SpeciesPrototype> _speciesList;
private readonly List<AntagPreferenceSelector> _antagPreferences; private readonly List<AntagPreferenceSelector> _antagPreferences;
private EntityUid _previewDummy;
private Control _previewSpriteControl => CSpriteViewFront; private Control _previewSpriteControl => CSpriteViewFront;
private Control _previewSpriteSideControl => CSpriteViewSide; private Control _previewSpriteSideControl => CSpriteViewSide;
private EntityUid? _previewDummy;
/// <summary>
/// Used to avoid unnecessarily re-creating the entity.
/// </summary>
private string? _lastSpecies;
private SpriteView? _previewSprite; private SpriteView? _previewSprite;
private SpriteView? _previewSpriteSide; private SpriteView? _previewSpriteSide;
@@ -487,42 +493,63 @@ namespace Content.Client.Preferences.UI
if (!disposing) if (!disposing)
return; return;
_entMan.DeleteEntity(_previewDummy); if (_previewDummy != null)
_entMan.DeleteEntity(_previewDummy.Value);
_preferencesManager.OnServerDataLoaded -= LoadServerData; _preferencesManager.OnServerDataLoaded -= LoadServerData;
} }
private void RebuildSpriteView() private void RebuildSpriteView()
{ {
var dollProto = _prototypeManager.Index<SpeciesPrototype>(Profile?.Species ?? SpeciesManager.DefaultSpecies).DollPrototype; var species = Profile?.Species ?? SpeciesManager.DefaultSpecies;
_previewDummy = _entMan.SpawnEntity(dollProto, MapCoordinates.Nullspace);
var sprite = _entMan.GetComponent<SpriteComponent>(_previewDummy); if (_lastSpecies != species)
_previewSpriteControl.DisposeAllChildren();
// Front
_previewSprite = new SpriteView
{ {
Sprite = sprite, var dollProto = _prototypeManager.Index<SpeciesPrototype>(species).DollPrototype;
Scale = (6, 6),
OverrideDirection = Direction.South,
VerticalAlignment = VAlignment.Center,
SizeFlagsStretchRatio = 1
};
_previewSpriteControl.AddChild(_previewSprite);
_previewSpriteSideControl.DisposeAllChildren(); if (_previewDummy != null)
_entMan.DeleteEntity(_previewDummy!.Value);
// Side _previewDummy = _entMan.SpawnEntity(dollProto, MapCoordinates.Nullspace);
_previewSpriteSide = new SpriteView _lastSpecies = species;
}
var sprite = _entMan.GetComponent<SpriteComponent>(_previewDummy!.Value);
if (_previewSprite == null)
{ {
Sprite = sprite, // Front
Scale = (6, 6), _previewSprite = new SpriteView
OverrideDirection = Direction.East, {
VerticalAlignment = VAlignment.Center, Sprite = sprite,
SizeFlagsStretchRatio = 1 Scale = (6, 6),
}; OverrideDirection = Direction.South,
_previewSpriteSideControl.AddChild(_previewSpriteSide); VerticalAlignment = VAlignment.Center,
SizeFlagsStretchRatio = 1
};
_previewSpriteControl.AddChild(_previewSprite);
}
else
{
_previewSprite.Sprite = sprite;
}
if (_previewSpriteSide == null)
{
_previewSpriteSide = new SpriteView
{
Sprite = sprite,
Scale = (6, 6),
OverrideDirection = Direction.East,
VerticalAlignment = VAlignment.Center,
SizeFlagsStretchRatio = 1
};
_previewSpriteSideControl.AddChild(_previewSpriteSide);
}
else
{
_previewSpriteSide.Sprite = sprite;
}
} }
private void LoadServerData() private void LoadServerData()
@@ -732,8 +759,8 @@ namespace Content.Client.Preferences.UI
return; return;
RebuildSpriteView(); RebuildSpriteView();
EntitySystem.Get<SharedHumanoidAppearanceSystem>().UpdateFromProfile(_previewDummy, Profile); EntitySystem.Get<SharedHumanoidAppearanceSystem>().UpdateFromProfile(_previewDummy!.Value, Profile);
LobbyCharacterPreviewPanel.GiveDummyJobClothes(_previewDummy, Profile); LobbyCharacterPreviewPanel.GiveDummyJobClothes(_previewDummy!.Value, Profile);
} }
public void UpdateControls() public void UpdateControls()