private void ForcedAddTocuh(GameObject i_Source, FP i_Timestamp) { if (i_Source == null) { return; } tnCharacterInfo characterInfo = i_Source.GetComponent <tnCharacterInfo>(); if (characterInfo == null) { return; } if (m_Touches.Count > 0) { tnTouch lastTouch = m_Touches[0]; if (lastTouch.characterId == characterInfo.characterId) { return; } } // If queue is full, remove the oldest touch. while (m_Touches.Count >= s_MaxTouches) { m_Touches.RemoveBack(); } // Add new ball touch. tnTouch touch = new tnTouch(); touch.SetCharacterId(characterInfo.characterId); touch.SetTeamId(characterInfo.teamId); tnCharacterInput characterInput = i_Source.GetComponent <tnCharacterInput>(); if (characterInput != null) { touch.SetIsHuman(characterInput.isHumanPlayer); touch.SetIsLocal(characterInput.isLocalPlayer); } else { touch.SetIsHuman(false); touch.SetIsLocal(false); } touch.SetTimestamp(i_Timestamp); m_Touches.AddFront(touch); }
// TrueSyncBehaviour's interface public override void OnSyncedTriggerEnter(TSCollision2D i_Collision) { if (!i_Collision.collider.CompareTag(Tags.s_Ball)) { return; } if (m_TeamId == Hash.s_NULL) { return; } tnGoalEventParams goalEventParams = new tnGoalEventParams(); goalEventParams.SetTeamId(m_TeamId); goalEventParams.SetHasValidScorer(false); { // Try to assign a valid scorer. tnKickable kickable = i_Collision.gameObject.GetComponent <tnKickable>(); if (kickable != null) { for (int touchIndex = 0; touchIndex < kickable.touchesCount; ++touchIndex) { tnTouch ballTouch = kickable.GetTouch(touchIndex); if (m_TeamId != ballTouch.teamId) { goalEventParams.SetScorerId(ballTouch.characterId); goalEventParams.SetScorerTeamId(ballTouch.teamId); goalEventParams.SetIsHumanScorer(ballTouch.isHuman); goalEventParams.SetIsLocalScorer(ballTouch.isLocal); goalEventParams.SetHasValidScorer(true); break; } } } } // Send event. Messenger.Broadcast <tnGoalEventParams>("Goal", goalEventParams); }