Small refactoring. Теперь выглядит лучше и расшире

This commit is contained in:
DocNITE
2023-05-16 00:46:38 +03:00
committed by Aviu00
parent 291cb0b92a
commit c4c2044326
5 changed files with 157 additions and 190 deletions

View File

@@ -4,47 +4,23 @@ using Robust.Shared.Animations;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Client.GameObjects; using Robust.Client.GameObjects;
using static Content.Shared.Animations.EmoteAnimationComponent; using static Content.Shared.Animations.EmoteAnimationComponent;
using Content.Shared.Interaction;
namespace Content.Client.Animations; namespace Content.Client.Animations;
public class EmoteAnimationSystem : SharedEmoteAnimationSystem public class EmoteAnimationSystem : EntitySystem
{ {
[Dependency] private readonly AnimationPlayerSystem AnimationSystem = default!; [Dependency] private readonly AnimationPlayerSystem _animationSystem = default!;
private readonly Dictionary<string, Action<EntityUid>> _emoteList = new();
//OnVerbsResponse?.Invoke(msg);
public override void Initialize() public override void Initialize()
{ {
SubscribeLocalEvent<EmoteAnimationComponent, ComponentHandleState>(OnHandleState); SubscribeLocalEvent<EmoteAnimationComponent, ComponentHandleState>(OnHandleState);
}
private void OnHandleState(EntityUid uid, EmoteAnimationComponent component, ref ComponentHandleState args) // EmoteFlip animation
{ _emoteList.Add("EmoteFlip", (EntityUid uid) =>
if (args.Current is not EmoteAnimationComponentState state)
return;
component.AnimationId = state.AnimationId;
switch(component.AnimationId)
{
case EmoteFlipActionPrototype:
PlayEmoteFlip(uid);
break;
case EmoteJumpActionPrototype:
PlayEmoteJump(uid);
break;
case EmoteTurnActionPrototype:
PlayEmoteTurn(uid);
break;
default:
break;
}
}
public void PlayEmoteFlip(EntityUid uid)
{ {
var animationKey = "emoteAnimationKeyId"; var animationKey = "emoteAnimationKeyId";
if (AnimationSystem.HasRunningAnimation(uid, animationKey)) if (_animationSystem.HasRunningAnimation(uid, animationKey))
return; return;
var baseAngle = Angle.Zero; var baseAngle = Angle.Zero;
@@ -75,14 +51,14 @@ public class EmoteAnimationSystem : SharedEmoteAnimationSystem
} }
}; };
AnimationSystem.Play(uid, animation, animationKey); _animationSystem.Play(uid, animation, animationKey);
} });
// EmoteJump animation
public void PlayEmoteJump(EntityUid uid) _emoteList.Add("EmoteJump", (EntityUid uid) =>
{ {
var animationKey = "emoteAnimationKeyId"; var animationKey = "emoteAnimationKeyId";
if (AnimationSystem.HasRunningAnimation(uid, animationKey)) if (_animationSystem.HasRunningAnimation(uid, animationKey))
return; return;
var animation = new Animation var animation = new Animation
@@ -105,14 +81,14 @@ public class EmoteAnimationSystem : SharedEmoteAnimationSystem
} }
}; };
AnimationSystem.Play(uid, animation, animationKey); _animationSystem.Play(uid, animation, animationKey);
} });
// EmoteTurn animation
public void PlayEmoteTurn(EntityUid uid) _emoteList.Add("EmoteTurn", (EntityUid uid) =>
{ {
var animationKey = "emoteAnimationKeyId_rotate"; // it needs for only rotate anim var animationKey = "emoteAnimationKeyId_rotate"; // it needs for only rotate anim
if (AnimationSystem.HasRunningAnimation(uid, animationKey)) if (_animationSystem.HasRunningAnimation(uid, animationKey))
return; return;
var animation = new Animation var animation = new Animation
@@ -141,6 +117,16 @@ public class EmoteAnimationSystem : SharedEmoteAnimationSystem
} }
}; };
AnimationSystem.Play(uid, animation, animationKey); _animationSystem.Play(uid, animation, animationKey);
});
}
private void OnHandleState(EntityUid uid, EmoteAnimationComponent component, ref ComponentHandleState args)
{
if (args.Current is not EmoteAnimationComponentState state)
return;
component.AnimationId = state.AnimationId;
_emoteList[component.AnimationId].Invoke(uid);
} }
} }

View File

@@ -1,4 +1,5 @@
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Content.Server.Actions; using Content.Server.Actions;
using Content.Shared.Actions.ActionTypes; using Content.Shared.Actions.ActionTypes;
using Content.Shared.Animations; using Content.Shared.Animations;
@@ -8,18 +9,23 @@ using Content.Shared.Chat.Prototypes;
namespace Content.Server.Animations; namespace Content.Server.Animations;
public class EmoteAnimationSystem : SharedEmoteAnimationSystem public class EmoteAnimationSystem : EntitySystem
{ {
[Dependency] private readonly ActionsSystem _action = default!; [Dependency] private readonly ActionsSystem _action = default!;
[Dependency] public readonly IPrototypeManager _proto = default!;
/// <summary>
/// We write 'EmoteAction' word before id name for instant action.
/// Example: EmoteActionJump, EmoteActionFlip and etc.
/// </summary>
private const string INSTANT_IDENTIFIER = "EmoteAction";
public override void Initialize() public override void Initialize()
{ {
SubscribeLocalEvent<EmoteAnimationComponent, ComponentGetState>(OnGetState); SubscribeLocalEvent<EmoteAnimationComponent, ComponentGetState>(OnGetState);
SubscribeLocalEvent<EmoteAnimationComponent, MapInitEvent>(OnMapInint); SubscribeLocalEvent<EmoteAnimationComponent, MapInitEvent>(OnMapInint);
SubscribeLocalEvent<EmoteAnimationComponent, ComponentShutdown>(OnShutdown); SubscribeLocalEvent<EmoteAnimationComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<EmoteAnimationComponent, EmoteEvent>(OnEmote); SubscribeLocalEvent<EmoteAnimationComponent, EmoteEvent>(OnEmote);
SubscribeLocalEvent<EmoteAnimationComponent, EmoteFlipActionEvent>(OnEmoteFlip); SubscribeLocalEvent<EmoteAnimationComponent, EmoteActionEvent>(OnEmoteAction);
SubscribeLocalEvent<EmoteAnimationComponent, EmoteJumpActionEvent>(OnEmoteJump);
SubscribeLocalEvent<EmoteAnimationComponent, EmoteTurnActionEvent>(OnEmoteTurn);
} }
private void OnGetState(EntityUid uid, EmoteAnimationComponent component, ref ComponentGetState args) private void OnGetState(EntityUid uid, EmoteAnimationComponent component, ref ComponentGetState args)
@@ -29,26 +35,29 @@ public class EmoteAnimationSystem : SharedEmoteAnimationSystem
private void OnMapInint(EntityUid uid, EmoteAnimationComponent component, MapInitEvent args) private void OnMapInint(EntityUid uid, EmoteAnimationComponent component, MapInitEvent args)
{ {
foreach (var item in _proto.EnumeratePrototypes<InstantActionPrototype>())
{
InstantAction? action;
if (item.ID.Length > INSTANT_IDENTIFIER.Length &&
item.ID[..INSTANT_IDENTIFIER.Length] == INSTANT_IDENTIFIER)
action = new InstantAction(item);
else
continue;
var actionFlip = new InstantAction(_proto.Index<InstantActionPrototype>(EmoteFlipActionPrototype)); if (action != null)
var actionJump = new InstantAction(_proto.Index<InstantActionPrototype>(EmoteJumpActionPrototype)); {
var actionTurn = new InstantAction(_proto.Index<InstantActionPrototype>(EmoteTurnActionPrototype)); component.Actions.Add(action);
component.FlipAction = actionFlip; _action.AddAction(uid, action, null);
component.JumpAction = actionJump; }
component.TurnAction = actionTurn; }
_action.AddAction(uid, actionFlip, null);
_action.AddAction(uid, actionJump, null);
_action.AddAction(uid, actionTurn, null);
} }
private void OnShutdown(EntityUid uid, EmoteAnimationComponent component, ComponentShutdown args) private void OnShutdown(EntityUid uid, EmoteAnimationComponent component, ComponentShutdown args)
{ {
if (component.FlipAction != null) foreach (var item in component.Actions)
_action.RemoveAction(uid, component.FlipAction); {
if (component.JumpAction != null) _action.RemoveAction(uid, item);
_action.RemoveAction(uid, component.JumpAction); }
if (component.TurnAction != null)
_action.RemoveAction(uid, component.TurnAction);
} }
private void OnEmote(EntityUid uid, EmoteAnimationComponent component, ref EmoteEvent args) private void OnEmote(EntityUid uid, EmoteAnimationComponent component, ref EmoteEvent args)
@@ -59,17 +68,9 @@ public class EmoteAnimationSystem : SharedEmoteAnimationSystem
PlayEmoteAnimation(uid, component, args.Emote.ID); PlayEmoteAnimation(uid, component, args.Emote.ID);
} }
private void OnEmoteFlip(EntityUid uid, EmoteAnimationComponent component, EmoteFlipActionEvent args) private void OnEmoteAction(EntityUid uid, EmoteAnimationComponent component, EmoteActionEvent args)
{ {
PlayEmoteAnimation(uid, component, EmoteFlipActionPrototype); PlayEmoteAnimation(uid, component, args.Emote);
}
private void OnEmoteJump(EntityUid uid, EmoteAnimationComponent component, EmoteJumpActionEvent args)
{
PlayEmoteAnimation(uid, component, EmoteJumpActionPrototype);
}
private void OnEmoteTurn(EntityUid uid, EmoteAnimationComponent component, EmoteTurnActionEvent args)
{
PlayEmoteAnimation(uid, component, EmoteTurnActionPrototype);
} }
public void PlayEmoteAnimation(EntityUid uid, EmoteAnimationComponent component, string emoteId) public void PlayEmoteAnimation(EntityUid uid, EmoteAnimationComponent component, string emoteId)

View File

@@ -6,16 +6,14 @@ using Robust.Shared.Serialization;
namespace Content.Shared.Animations; namespace Content.Shared.Animations;
/// <summary> /// <summary>
/// Event for playing animations
/// </summary> /// </summary>
public class EmoteFlipActionEvent : InstantActionEvent { }; public class EmoteActionEvent : InstantActionEvent
{
/// <summary> [ViewVariables]
/// </summary> [DataField("emote", readOnly: true, required: true)]
public class EmoteJumpActionEvent : InstantActionEvent { }; public string Emote = default!;
};
/// <summary>
/// </summary>
public class EmoteTurnActionEvent : InstantActionEvent { };
[RegisterComponent] [RegisterComponent]
[NetworkedComponent] [NetworkedComponent]
@@ -24,9 +22,7 @@ public class EmoteAnimationComponent : Component
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
public string AnimationId = "none"; public string AnimationId = "none";
public InstantAction? FlipAction; public readonly List<InstantAction> Actions = new();
public InstantAction? JumpAction;
public InstantAction? TurnAction;
[Serializable, NetSerializable] [Serializable, NetSerializable]
public class EmoteAnimationComponentState : ComponentState public class EmoteAnimationComponentState : ComponentState

View File

@@ -1,19 +0,0 @@
using Robust.Shared.GameStates;
using static Content.Shared.Animations.EmoteAnimationComponent;
using Robust.Shared.Prototypes;
namespace Content.Shared.Animations;
public class SharedEmoteAnimationSystem : EntitySystem
{
public const string EmoteFlipActionPrototype = "EmoteFlip";
public const string EmoteJumpActionPrototype = "EmoteJump";
public const string EmoteTurnActionPrototype = "EmoteTurn";
[Dependency] public readonly SharedAppearanceSystem _appearance = default!;
[Dependency] public readonly IPrototypeManager _proto = default!;
public override void Initialize()
{
}
}

View File

@@ -1,26 +1,29 @@
# flip animation # flip animation
- type: instantAction - type: instantAction
id: EmoteFlip id: EmoteActionFlip
name: emote-flip-action-name name: emote-flip-action-name
description: emote-flip-action-description description: emote-flip-action-description
icon: Interface/Actions/blight.png icon: Interface/Actions/blight.png
event: !type:EmoteFlipActionEvent event: !type:EmoteActionEvent
emote: EmoteFlip
# jump animation # jump animation
- type: instantAction - type: instantAction
id: EmoteJump id: EmoteActionJump
name: emote-jump-action-name name: emote-jump-action-name
description: emote-jump-action-description description: emote-jump-action-description
icon: Interface/Actions/blight.png icon: Interface/Actions/blight.png
event: !type:EmoteJumpActionEvent event: !type:EmoteActionEvent
emote: EmoteJump
# turn around in 4 directions animation # turn around in 4 directions animation
- type: instantAction - type: instantAction
id: EmoteTurn id: EmoteActionTurn
name: emote-turn-action-name name: emote-turn-action-name
description: emote-turn-action-description description: emote-turn-action-description
icon: Interface/Actions/blight.png icon: Interface/Actions/blight.png
event: !type:EmoteTurnActionEvent event: !type:EmoteActionEvent
emote: EmoteTurn
# Using EmoteAnimation from IC action chat # Using EmoteAnimation from IC action chat