Reduce resolve and cut more corners in destructible (#6741)
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
using Content.Server.Construction;
|
using Content.Server.Construction;
|
||||||
using Content.Server.Destructible.Thresholds;
|
using Content.Server.Destructible.Thresholds;
|
||||||
using Content.Server.Explosion.EntitySystems;
|
using Content.Server.Explosion.EntitySystems;
|
||||||
|
using Content.Server.Stack;
|
||||||
using Content.Shared.Acts;
|
using Content.Shared.Acts;
|
||||||
using Content.Shared.Damage;
|
using Content.Shared.Damage;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Random;
|
using Robust.Shared.Random;
|
||||||
|
|
||||||
namespace Content.Server.Destructible
|
namespace Content.Server.Destructible
|
||||||
@@ -21,6 +21,9 @@ namespace Content.Server.Destructible
|
|||||||
[Dependency] public readonly AudioSystem AudioSystem = default!;
|
[Dependency] public readonly AudioSystem AudioSystem = default!;
|
||||||
[Dependency] public readonly ConstructionSystem ConstructionSystem = default!;
|
[Dependency] public readonly ConstructionSystem ConstructionSystem = default!;
|
||||||
[Dependency] public readonly ExplosionSystem ExplosionSystem = default!;
|
[Dependency] public readonly ExplosionSystem ExplosionSystem = default!;
|
||||||
|
[Dependency] public readonly StackSystem StackSystem = default!;
|
||||||
|
[Dependency] public readonly IPrototypeManager PrototypeManager = default!;
|
||||||
|
[Dependency] public readonly IComponentFactory ComponentFactory = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Content.Server.Stack;
|
using Content.Server.Stack;
|
||||||
using Content.Shared.Prototypes;
|
using Content.Shared.Prototypes;
|
||||||
using Content.Shared.Random.Helpers;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Serialization.Manager.Attributes;
|
|
||||||
|
|
||||||
namespace Content.Server.Destructible.Thresholds.Behaviors
|
namespace Content.Server.Destructible.Thresholds.Behaviors
|
||||||
{
|
{
|
||||||
@@ -26,6 +20,8 @@ namespace Content.Server.Destructible.Thresholds.Behaviors
|
|||||||
{
|
{
|
||||||
var position = system.EntityManager.GetComponent<TransformComponent>(owner).MapPosition;
|
var position = system.EntityManager.GetComponent<TransformComponent>(owner).MapPosition;
|
||||||
|
|
||||||
|
var getRandomVector = () => new Vector2(system.Random.NextFloat(-Offset, Offset), system.Random.NextFloat(-Offset, Offset));
|
||||||
|
|
||||||
foreach (var (entityId, minMax) in Spawn)
|
foreach (var (entityId, minMax) in Spawn)
|
||||||
{
|
{
|
||||||
var count = minMax.Min >= minMax.Max
|
var count = minMax.Min >= minMax.Max
|
||||||
@@ -34,19 +30,16 @@ namespace Content.Server.Destructible.Thresholds.Behaviors
|
|||||||
|
|
||||||
if (count == 0) continue;
|
if (count == 0) continue;
|
||||||
|
|
||||||
if (EntityPrototypeHelpers.HasComponent<StackComponent>(entityId))
|
if (EntityPrototypeHelpers.HasComponent<StackComponent>(entityId, system.PrototypeManager, system.ComponentFactory))
|
||||||
{
|
{
|
||||||
var spawned = system.EntityManager.SpawnEntity(entityId, position);
|
var spawned = system.EntityManager.SpawnEntity(entityId, position.Offset(getRandomVector()));
|
||||||
var stack = IoCManager.Resolve<IEntityManager>().GetComponent<StackComponent>(spawned);
|
system.StackSystem.SetCount(spawned, count);
|
||||||
EntitySystem.Get<StackSystem>().SetCount(spawned, count, stack);
|
|
||||||
spawned.RandomOffset(Offset);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (var i = 0; i < count; i++)
|
for (var i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
var spawned = system.EntityManager.SpawnEntity(entityId, position);
|
system.EntityManager.SpawnEntity(entityId, position.Offset(getRandomVector()));
|
||||||
spawned.RandomOffset(Offset);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,12 @@
|
|||||||
damageModifierSet: Metallic
|
damageModifierSet: Metallic
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 100
|
||||||
|
behaviors: #excess damage (nuke?). avoid computational cost of spawning entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 15
|
damage: 15
|
||||||
@@ -89,6 +95,12 @@
|
|||||||
sprite: Structures/Furniture/Tables/reinforced.rsi
|
sprite: Structures/Furniture/Tables/reinforced.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 200
|
||||||
|
behaviors: #excess damage (nuke?). avoid computational cost of spawning entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 75
|
damage: 75
|
||||||
@@ -165,6 +177,12 @@
|
|||||||
Blunt: 40
|
Blunt: 40
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 100
|
||||||
|
behaviors: #excess damage (nuke?). avoid computational cost of spawning entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 20
|
damage: 20
|
||||||
@@ -207,6 +225,12 @@
|
|||||||
Blunt: 100
|
Blunt: 100
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 200
|
||||||
|
behaviors: #excess damage (nuke?). avoid computational cost of spawning entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 50
|
damage: 50
|
||||||
@@ -244,6 +268,12 @@
|
|||||||
damageModifierSet: Wood
|
damageModifierSet: Wood
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 100
|
||||||
|
behaviors: #excess damage (nuke?). avoid computational cost of spawning entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 15
|
damage: 15
|
||||||
|
|||||||
@@ -35,6 +35,12 @@
|
|||||||
- MobImpassable
|
- MobImpassable
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 300
|
||||||
|
behaviors: #excess damage (nuke?). avoid computational cost of spawning entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 100
|
damage: 100
|
||||||
|
|||||||
@@ -45,6 +45,12 @@
|
|||||||
damageModifierSet: Metallic
|
damageModifierSet: Metallic
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 200
|
||||||
|
behaviors: #excess damage, don't spawn entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 50
|
damage: 50
|
||||||
@@ -198,6 +204,12 @@
|
|||||||
damageContainer: Inorganic
|
damageContainer: Inorganic
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 100
|
||||||
|
behaviors: #excess damage, don't spawn entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 25
|
damage: 25
|
||||||
|
|||||||
@@ -33,6 +33,12 @@
|
|||||||
damageModifierSet: Metallic
|
damageModifierSet: Metallic
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 200
|
||||||
|
behaviors: #excess damage, don't spawn entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 50
|
damage: 50
|
||||||
|
|||||||
@@ -13,6 +13,12 @@
|
|||||||
damageModifierSet: Glass
|
damageModifierSet: Glass
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 1000
|
||||||
|
behaviors: #excess damage, don't spawn entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 600
|
damage: 600
|
||||||
@@ -66,6 +72,12 @@
|
|||||||
node: plasmaReinforcedWindowDirectional
|
node: plasmaReinforcedWindowDirectional
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 1000
|
||||||
|
behaviors: #excess damage, don't spawn entities.
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 600
|
damage: 600
|
||||||
|
|||||||
@@ -131,6 +131,12 @@
|
|||||||
messages: WindowMessages
|
messages: WindowMessages
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 150 #excess damage (nuke?). avoid computational cost of spawning entities.
|
||||||
|
behaviors:
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
- trigger:
|
- trigger:
|
||||||
!type:DamageTrigger
|
!type:DamageTrigger
|
||||||
damage: 50
|
damage: 50
|
||||||
|
|||||||
Reference in New Issue
Block a user