prevent repeat TriggerOnCollide triggers (#40428)
* prevent repeat TriggerOnCollide triggers * review comment: remove TriggerOnCollide when out of triggers
This commit is contained in:
@@ -20,4 +20,10 @@ public sealed partial class TriggerOnCollideComponent : BaseTriggerOnXComponent
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField, AutoNetworkedField]
|
[DataField, AutoNetworkedField]
|
||||||
public bool IgnoreOtherNonHard = true;
|
public bool IgnoreOtherNonHard = true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If not null, limits the amount of times this component can trigger.
|
||||||
|
/// </summary>
|
||||||
|
[DataField, AutoNetworkedField]
|
||||||
|
public int? MaxTriggers = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,21 @@ public sealed partial class TriggerSystem
|
|||||||
|
|
||||||
private void OnCollide(Entity<TriggerOnCollideComponent> ent, ref StartCollideEvent args)
|
private void OnCollide(Entity<TriggerOnCollideComponent> ent, ref StartCollideEvent args)
|
||||||
{
|
{
|
||||||
if (args.OurFixtureId == ent.Comp.FixtureID && (!ent.Comp.IgnoreOtherNonHard || args.OtherFixture.Hard))
|
if (
|
||||||
|
args.OurFixtureId == ent.Comp.FixtureID
|
||||||
|
&& (!ent.Comp.IgnoreOtherNonHard || args.OtherFixture.Hard)
|
||||||
|
&& (ent.Comp.MaxTriggers == null || ent.Comp.MaxTriggers > 0)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (ent.Comp.MaxTriggers != null)
|
||||||
|
{
|
||||||
|
ent.Comp.MaxTriggers--;
|
||||||
|
Dirty(ent);
|
||||||
|
if (ent.Comp.MaxTriggers <= 0)
|
||||||
|
RemCompDeferred<TriggerOnCollideComponent>(ent);
|
||||||
|
}
|
||||||
Trigger(ent.Owner, args.OtherEntity, ent.Comp.KeyOut);
|
Trigger(ent.Owner, args.OtherEntity, ent.Comp.KeyOut);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnStepTriggered(Entity<TriggerOnStepTriggerComponent> ent, ref StepTriggeredOffEvent args)
|
private void OnStepTriggered(Entity<TriggerOnStepTriggerComponent> ent, ref StepTriggeredOffEvent args)
|
||||||
|
|||||||
@@ -176,6 +176,9 @@
|
|||||||
Poison: 5
|
Poison: 5
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: projectile
|
fixtureID: projectile
|
||||||
|
# Projectile.DeleteOnCollide is true, but allow this to hit multiple entities if they're
|
||||||
|
# stacked up (they will all trigger a collide), so this isn't frustrating to use
|
||||||
|
maxTriggers: null
|
||||||
- type: PolymorphOnTrigger
|
- type: PolymorphOnTrigger
|
||||||
targetUser: true
|
targetUser: true
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: projectile
|
fixtureID: projectile
|
||||||
|
maxTriggers: 1
|
||||||
- type: Projectile
|
- type: Projectile
|
||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
|
|||||||
@@ -55,6 +55,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: rune
|
fixtureID: rune
|
||||||
|
maxTriggers: 1
|
||||||
- type: ExplodeOnTrigger
|
- type: ExplodeOnTrigger
|
||||||
- type: Explosive
|
- type: Explosive
|
||||||
explosionType: Cryo
|
explosionType: Cryo
|
||||||
@@ -74,6 +75,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: rune
|
fixtureID: rune
|
||||||
|
maxTriggers: 1
|
||||||
- type: DeleteOnTrigger
|
- type: DeleteOnTrigger
|
||||||
- type: StunOnCollide
|
- type: StunOnCollide
|
||||||
stunAmount: 5
|
stunAmount: 5
|
||||||
@@ -92,6 +94,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: ignition
|
fixtureID: ignition
|
||||||
|
maxTriggers: 1
|
||||||
- type: Fixtures
|
- type: Fixtures
|
||||||
fixtures:
|
fixtures:
|
||||||
ignition:
|
ignition:
|
||||||
|
|||||||
@@ -40,6 +40,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: floortrap
|
fixtureID: floortrap
|
||||||
|
maxTriggers: 1
|
||||||
- type: ExplodeOnTrigger
|
- type: ExplodeOnTrigger
|
||||||
- type: Explosive
|
- type: Explosive
|
||||||
explosionType: Default
|
explosionType: Default
|
||||||
@@ -55,6 +56,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: floortrap
|
fixtureID: floortrap
|
||||||
|
maxTriggers: 1
|
||||||
- type: EmpOnTrigger
|
- type: EmpOnTrigger
|
||||||
range: 2
|
range: 2
|
||||||
energyConsumption: 5000
|
energyConsumption: 5000
|
||||||
@@ -67,6 +69,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: floortrap
|
fixtureID: floortrap
|
||||||
|
maxTriggers: 1
|
||||||
- type: SpawnOnTrigger
|
- type: SpawnOnTrigger
|
||||||
proto: MobCarp
|
proto: MobCarp
|
||||||
- type: DeleteOnTrigger
|
- type: DeleteOnTrigger
|
||||||
@@ -78,6 +81,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: floortrap
|
fixtureID: floortrap
|
||||||
|
maxTriggers: 1
|
||||||
- type: SpawnOnTrigger
|
- type: SpawnOnTrigger
|
||||||
proto: MobBearSpace
|
proto: MobBearSpace
|
||||||
- type: DeleteOnTrigger
|
- type: DeleteOnTrigger
|
||||||
@@ -89,6 +93,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: floortrap
|
fixtureID: floortrap
|
||||||
|
maxTriggers: 1
|
||||||
- type: SpawnOnTrigger
|
- type: SpawnOnTrigger
|
||||||
proto: MobKangarooSpace
|
proto: MobKangarooSpace
|
||||||
- type: DeleteOnTrigger
|
- type: DeleteOnTrigger
|
||||||
@@ -100,6 +105,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: floortrap
|
fixtureID: floortrap
|
||||||
|
maxTriggers: 1
|
||||||
- type: SpawnOnTrigger
|
- type: SpawnOnTrigger
|
||||||
proto: MobXenoDrone
|
proto: MobXenoDrone
|
||||||
- type: DeleteOnTrigger
|
- type: DeleteOnTrigger
|
||||||
@@ -111,6 +117,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: TriggerOnCollide
|
- type: TriggerOnCollide
|
||||||
fixtureID: floortrap
|
fixtureID: floortrap
|
||||||
|
maxTriggers: 1
|
||||||
- type: SpawnOnTrigger
|
- type: SpawnOnTrigger
|
||||||
proto: MobXeno
|
proto: MobXeno
|
||||||
- type: DeleteOnTrigger
|
- type: DeleteOnTrigger
|
||||||
|
|||||||
Reference in New Issue
Block a user