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);
    }
Esempio n. 2
0
    // 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);
    }