Change Polymorph Actions to use Polymorph Proto Id (#26419)
* polymorph changes Adds poly proto ids to polymorph action event and checks for proto id when performing * nullable proto id * Replaces instances of Polymorph prototype with a proto id and tryindex * birdup --------- Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
@@ -118,7 +118,10 @@ public sealed partial class PolymorphSystem : EntitySystem
|
||||
|
||||
private void OnPolymorphActionEvent(Entity<PolymorphableComponent> ent, ref PolymorphActionEvent args)
|
||||
{
|
||||
PolymorphEntity(ent, args.Prototype.Configuration);
|
||||
if (!_proto.TryIndex(args.ProtoId, out var prototype))
|
||||
return;
|
||||
|
||||
PolymorphEntity(ent, prototype.Configuration);
|
||||
}
|
||||
|
||||
private void OnRevertPolymorphActionEvent(Entity<PolymorphedEntityComponent> ent,
|
||||
@@ -348,7 +351,9 @@ public sealed partial class PolymorphSystem : EntitySystem
|
||||
if (target.Comp.PolymorphActions.ContainsKey(id))
|
||||
return;
|
||||
|
||||
var polyProto = _proto.Index(id);
|
||||
if (!_proto.TryIndex(id, out var polyProto))
|
||||
return;
|
||||
|
||||
var entProto = _proto.Index(polyProto.Configuration.Entity);
|
||||
|
||||
EntityUid? actionId = default!;
|
||||
@@ -366,7 +371,7 @@ public sealed partial class PolymorphSystem : EntitySystem
|
||||
|
||||
baseAction.Icon = new SpriteSpecifier.EntityPrototype(polyProto.Configuration.Entity);
|
||||
if (baseAction is InstantActionComponent action)
|
||||
action.Event = new PolymorphActionEvent(prototype: polyProto);
|
||||
action.Event = new PolymorphActionEvent(id);
|
||||
}
|
||||
|
||||
public void RemovePolymorphAction(ProtoId<PolymorphPrototype> id, Entity<PolymorphableComponent> target)
|
||||
|
||||
@@ -3,8 +3,8 @@ using Content.Server.Administration;
|
||||
using Content.Server.Polymorph.Systems;
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.Polymorph;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Toolshed;
|
||||
using Robust.Shared.Toolshed.TypeParsers;
|
||||
|
||||
namespace Content.Server.Polymorph.Toolshed;
|
||||
|
||||
@@ -15,22 +15,26 @@ namespace Content.Server.Polymorph.Toolshed;
|
||||
public sealed class PolymorphCommand : ToolshedCommand
|
||||
{
|
||||
private PolymorphSystem? _system;
|
||||
[Dependency] private IPrototypeManager _proto = default!;
|
||||
|
||||
[CommandImplementation]
|
||||
public EntityUid? Polymorph(
|
||||
[PipedArgument] EntityUid input,
|
||||
[CommandArgument] Prototype<PolymorphPrototype> prototype
|
||||
[CommandArgument] ProtoId<PolymorphPrototype> protoId
|
||||
)
|
||||
{
|
||||
_system ??= GetSys<PolymorphSystem>();
|
||||
|
||||
return _system.PolymorphEntity(input, prototype.Value.Configuration);
|
||||
if (!_proto.TryIndex(protoId, out var prototype))
|
||||
return null;
|
||||
|
||||
return _system.PolymorphEntity(input, prototype.Configuration);
|
||||
}
|
||||
|
||||
[CommandImplementation]
|
||||
public IEnumerable<EntityUid> Polymorph(
|
||||
[PipedArgument] IEnumerable<EntityUid> input,
|
||||
[CommandArgument] Prototype<PolymorphPrototype> prototype
|
||||
[CommandArgument] ProtoId<PolymorphPrototype> protoId
|
||||
)
|
||||
=> input.Select(x => Polymorph(x, prototype)).Where(x => x is not null).Select(x => (EntityUid)x!);
|
||||
=> input.Select(x => Polymorph(x, protoId)).Where(x => x is not null).Select(x => (EntityUid)x!);
|
||||
}
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
using Content.Shared.Actions;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.Polymorph;
|
||||
|
||||
public sealed partial class PolymorphActionEvent : InstantActionEvent
|
||||
{
|
||||
/// <summary>
|
||||
/// The polymorph prototype containing all the information about
|
||||
/// the specific polymorph.
|
||||
/// The polymorph proto id, containing all the information about
|
||||
/// the specific polymorph.
|
||||
/// </summary>
|
||||
public PolymorphPrototype Prototype = default!;
|
||||
[DataField]
|
||||
public ProtoId<PolymorphPrototype>? ProtoId;
|
||||
|
||||
public PolymorphActionEvent(PolymorphPrototype prototype) : this()
|
||||
public PolymorphActionEvent(ProtoId<PolymorphPrototype> protoId) : this()
|
||||
{
|
||||
Prototype = prototype;
|
||||
ProtoId = protoId;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user