Character editor flicker fix (#7002)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user