Skip to content

Commit cf81416

Browse files
committed
Bugfix: Collision starts outside zone but then enters zone wasn't causing a penalty
1 parent 3a4f435 commit cf81416

File tree

1 file changed

+9
-19
lines changed

1 file changed

+9
-19
lines changed

fission/src/mirabuf/ProtectedZoneSceneObject.ts

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ class ProtectedZoneSceneObject extends SceneObject {
5555
private _prefs?: ProtectedZonePreferences
5656
private _joltBodyId?: Jolt.BodyID
5757
private _mesh?: THREE.Mesh
58-
private _collision?: (event: OnContactAddedEvent) => void
59-
private _collisionPersisted?: (event: OnContactPersistedEvent) => void
58+
private _collision?: (event: OnContactAddedEvent | OnContactPersistedEvent) => void
6059
private _collisionRemoved?: (event: OnContactRemovedEvent) => void
6160

6261
private _robotsInside: Map<MirabufSceneObject, number> = new Map()
@@ -74,7 +73,7 @@ class ProtectedZoneSceneObject extends SceneObject {
7473

7574
private isRobotInside(robot: MirabufSceneObject): boolean {
7675
const timeInside = this._robotsInside.get(robot) ?? 0
77-
return Date.now() - timeInside < 500
76+
return Date.now() - timeInside < 100
7877
}
7978

8079
public constructor(parentAssembly: MirabufSceneObject, index: number, render?: boolean) {
@@ -127,8 +126,8 @@ class ProtectedZoneSceneObject extends SceneObject {
127126
this._mesh?.scale.set(props.scale.x, props.scale.y, props.scale.z)
128127
}
129128

130-
// Detect when something enters the zone
131-
this._collision = (event: OnContactAddedEvent) => {
129+
// Detect when something enters or persists in the zone
130+
this._collision = (event: OnContactAddedEvent | OnContactPersistedEvent) => {
132131
const body1 = event.message.body1
133132
const body2 = event.message.body2
134133

@@ -143,19 +142,7 @@ class ProtectedZoneSceneObject extends SceneObject {
143142
this.handleContactPenalty(body1, body2)
144143
}
145144
OnContactAddedEvent.addListener(this._collision)
146-
147-
// Detects when something persists in the zone
148-
this._collisionPersisted = (event: OnContactPersistedEvent) => {
149-
const body1 = event.message.body1
150-
const body2 = event.message.body2
151-
152-
if (body1.GetIndexAndSequenceNumber() == this._joltBodyId?.GetIndexAndSequenceNumber()) {
153-
this.zoneCollision(body2)
154-
} else if (body2.GetIndexAndSequenceNumber() == this._joltBodyId?.GetIndexAndSequenceNumber()) {
155-
this.zoneCollision(body1)
156-
}
157-
}
158-
OnContactPersistedEvent.addListener(this._collisionPersisted)
145+
OnContactPersistedEvent.addListener(this._collision)
159146

160147
// Detects when something leaves the zone
161148
this._collisionRemoved = (event: OnContactRemovedEvent) => {
@@ -216,7 +203,10 @@ class ProtectedZoneSceneObject extends SceneObject {
216203
}
217204
}
218205

219-
if (this._collision) OnContactAddedEvent.removeListener(this._collision)
206+
if (this._collision) {
207+
OnContactAddedEvent.removeListener(this._collision)
208+
OnContactPersistedEvent.removeListener(this._collision)
209+
}
220210
if (this._collisionRemoved) OnContactRemovedEvent.removeListener(this._collisionRemoved)
221211
}
222212

0 commit comments

Comments
 (0)