]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
New Projectile Effect:Temperature Change (#31004)
authorBoaz1111 <149967078+Boaz1111@users.noreply.github.com>
Mon, 19 Aug 2024 03:11:17 +0000 (05:11 +0200)
committerGitHub <noreply@github.com>
Mon, 19 Aug 2024 03:11:17 +0000 (21:11 -0600)
* bah

* all done, thanks slarti

* makes the watcher do the thing

* Update TemperatureSystem.cs

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
* changes something

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Content.Server/Temperature/Components/ChangeTemperatureOnCollideComponent.cs [new file with mode: 0644]
Content.Server/Temperature/Systems/TemperatureSystem.cs
Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml

diff --git a/Content.Server/Temperature/Components/ChangeTemperatureOnCollideComponent.cs b/Content.Server/Temperature/Components/ChangeTemperatureOnCollideComponent.cs
new file mode 100644 (file)
index 0000000..1f57237
--- /dev/null
@@ -0,0 +1,24 @@
+using Content.Server.Temperature.Systems;
+using Content.Server.Temperature.Components; 
+using Content.Shared.Temperature;
+
+namespace Content.Server.Temperature.Components;
+
+/// <summary>
+/// Put this component on a projectile that you would like to change the temperature on whatever it hits.
+/// </summary>
+[RegisterComponent, Access(typeof(TemperatureSystem))]
+public sealed partial class ChangeTemperatureOnCollideComponent : Component
+{
+    /// <summary>
+    /// The amount it changes the target's temperature by. In Joules.
+    /// </summary>
+    [DataField]
+    public float Heat = 0f;
+
+    /// <summary>
+    /// If this heat change ignores heat resistance or not.
+    /// </summary>
+    [DataField]
+    public bool IgnoreHeatResistance = true;
+}
\ No newline at end of file
index 8b6fa107cc0b11fe07c06e616911a779b6f864ac..c6fa213ccb7a1710084443283ac39331ebb22f78 100644 (file)
@@ -12,6 +12,8 @@ using Content.Shared.Rejuvenate;
 using Content.Shared.Temperature;
 using Robust.Shared.Physics.Components;
 using Robust.Shared.Prototypes;
+using Robust.Shared.Physics.Events;
+using Content.Shared.Projectiles;
 
 namespace Content.Server.Temperature.Systems;
 
@@ -21,6 +23,7 @@ public sealed class TemperatureSystem : EntitySystem
     [Dependency] private readonly AtmosphereSystem _atmosphere = default!;
     [Dependency] private readonly DamageableSystem _damageable = default!;
     [Dependency] private readonly IAdminLogManager _adminLogger = default!;
+    [Dependency] private readonly TemperatureSystem _temperature = default!;
 
     /// <summary>
     ///     All the components that will have their damage updated at the end of the tick.
@@ -47,6 +50,8 @@ public sealed class TemperatureSystem : EntitySystem
 
         SubscribeLocalEvent<InternalTemperatureComponent, MapInitEvent>(OnInit);
 
+        SubscribeLocalEvent<ChangeTemperatureOnCollideComponent, ProjectileHitEvent>(ChangeTemperatureOnCollide);
+
         // Allows overriding thresholds based on the parent's thresholds.
         SubscribeLocalEvent<TemperatureComponent, EntParentChangedMessage>(OnParentChange);
         SubscribeLocalEvent<ContainerTemperatureDamageThresholdsComponent, ComponentStartup>(
@@ -300,6 +305,11 @@ public sealed class TemperatureSystem : EntitySystem
         args.Args.TemperatureDelta *= ev.Coefficient;
     }
 
+    private void ChangeTemperatureOnCollide(Entity<ChangeTemperatureOnCollideComponent> ent, ref ProjectileHitEvent args)
+    {
+        _temperature.ChangeHeat(args.Target, ent.Comp.Heat, ent.Comp.IgnoreHeatResistance);// adjust the temperature 
+    }
+
     private void OnParentChange(EntityUid uid, TemperatureComponent component,
         ref EntParentChangedMessage args)
     {
index d2c6497831c552b7c95a9def9830d049894f8f1e..42217a88bbacc8a12e6f16e82a06940c23ebcd7c 100644 (file)
         mask:
         - Opaque
       fly-by: *flybyfixture
-  - type: StaminaDamageOnCollide
-    damage: 40
   - type: Projectile
     #   soundHit:  Waiting on serv3
     impactEffect: BulletImpactEffectDisabler
     damage:
       types:
-        Cold: 10
+        Cold: 0
   - type: TimedDespawn
     lifetime: 3
+  - type: ChangeTemperatureOnCollide
+    heat: -50000
 
 - type: entity
   name: magmawing watcher bolt
     impactEffect: BulletImpactEffectOrangeDisabler
     damage:
       types:
-        Heat: 10
+        Heat: 0
+  - type: ChangeTemperatureOnCollide
+    heat: 50000
 
 - type: entity
   id: BulletKinetic