Compare commits

...

1 Commits

Author SHA1 Message Date
Ed
6dc363ee4b datafields 2025-08-12 13:44:15 +03:00
6 changed files with 117 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
using JetBrains.Annotations;
namespace Content.Shared._CP14.MagicRitual;
[ImplicitDataDefinitionForInheritors]
[MeansImplicitUse]
public abstract partial class CP14RitualCondition
{
public abstract void Check(IEntityManager entManager, EntityUid ritual);
}

View File

@@ -0,0 +1,11 @@
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.MagicRitual;
[ImplicitDataDefinitionForInheritors]
[MeansImplicitUse]
public abstract partial class CP14RitualEffect
{
public abstract void Effect(IEntityManager entMan, IPrototypeManager protoMan, EntityUid ritual);
}

View File

@@ -0,0 +1,25 @@
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.MagicRitual.Components;
/// <summary>
///
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class CP14RitualNodeComponent : Component
{
[DataField]
public List<CP14RitualEdge> Edges = new();
}
[DataDefinition]
public sealed partial class CP14RitualEdge
{
[DataField(required: true)]
public EntProtoId TargetNode = default!;
[DataField]
public List<CP14RitualCondition> Conditions = new();
}

View File

@@ -0,0 +1,29 @@
using System.Numerics;
using Content.Shared._CP14.MagicRitual.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Shared._CP14.MagicRitual.Effects;
public sealed partial class ChangeNode : CP14RitualEffect
{
[DataField(required: true)]
public EntProtoId Proto = default!;
public override void Effect(IEntityManager entMan, IPrototypeManager protoMan, EntityUid ritual)
{
if (!protoMan.TryIndex(Proto, out var indexedProto))
return;
var compFactory = IoCManager.Resolve<IComponentFactory>();
if (!indexedProto.TryGetComponent<CP14RitualNodeComponent>(out var targetNode, compFactory))
{
Logger.Error($"Ritual node {indexedProto.ID} does not have a CP14RitualNodeComponent, cannot change node.");
return;
}
var origin = entMan.GetComponent<TransformComponent>(ritual).Coordinates;
entMan.SpawnAtPosition(Proto, origin);
entMan.QueueDeleteEntity(ritual);
}
}

View File

@@ -0,0 +1,29 @@
using System.Numerics;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Shared._CP14.MagicRitual.Effects;
public sealed partial class SpawnEntity : CP14RitualEffect
{
[DataField(required: true)]
public EntProtoId Proto = default!;
[DataField]
public int Count = 1;
[DataField]
public float Offset = 1f;
public override void Effect(IEntityManager entMan, IPrototypeManager protoMan, EntityUid ritual)
{
var random = IoCManager.Resolve<IRobustRandom>();
var origin = entMan.GetComponent<TransformComponent>(ritual).Coordinates;
for (var i = 0; i < Count; i++)
{
var spawnPosition = origin.Offset(new Vector2(random.NextFloat(-Offset, Offset), random.NextFloat(-Offset, Offset)));
var ent = entMan.SpawnAtPosition(Proto, spawnPosition);
}
}
}

View File

@@ -0,0 +1,13 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.MagicRitual.Prototypes;
[Prototype("ritualGraph")]
public sealed partial class CP14RitualGraphPrototype : IPrototype
{
[IdDataField]
public string ID { get; private set; } = default!;
[DataField(required: true)]
public LocId Name = string.Empty;
}