コード例 #1
0
ファイル: Parallel2D.cs プロジェクト: waynesohot/upmtest
        static void AddAllContactWrapper(PContact2D contact)
        {
            _allContactWrapperEnd.contact = contact;

            if (_allContactWrapperEnd.next == null)
            {
                _allContactWrapperEnd.next = new PContact2DWrapper();
            }
            _allContactWrapperEnd = _allContactWrapperEnd.next;

            _allContactCount++;
        }
コード例 #2
0
ファイル: Parallel2D.cs プロジェクト: waynesohot/upmtest
        static void AddExitContactWrapper(PContact2D contact)
        {
            _exitContactWrapperEnd.contact = contact;

            if (_exitContactWrapperEnd.next == null)
            {
                _exitContactWrapperEnd.next = new PContact2DWrapper();
            }
            _exitContactWrapperEnd = _exitContactWrapperEnd.next;

            _exitContactCount++;
        }
コード例 #3
0
ファイル: Parallel2D.cs プロジェクト: waynesohot/upmtest
 static void ResetAllContacts()
 {
     _allContactCount      = 0;
     _allContactWrapperEnd = _allContactWrapperHead;
 }
コード例 #4
0
ファイル: Parallel2D.cs プロジェクト: waynesohot/upmtest
 static void ResetExitContacts()
 {
     _exitContactCount      = 0;
     _exitContactWrapperEnd = _exitContactWrapperHead;
 }
コード例 #5
0
ファイル: Parallel2D.cs プロジェクト: waynesohot/upmtest
 static void ResetEnterContacts()
 {
     _enterContactCount      = 0;
     _enterContactWrapperEnd = _enterContactWrapperHead;
 }
コード例 #6
0
ファイル: Parallel2D.cs プロジェクト: waynesohot/upmtest
        public static void ExcuteUserCallbacks(Fix64 time)
        {
            //call contact exit callback

            PContact2DWrapper currentWrapper = _exitContactWrapperHead;

            for (int i = 0; i < _exitContactCount; i++)
            {
                PContact2D contact = currentWrapper.contact;

                PBody2D body1 = bodySortedList[contact.Body1ID];
                PBody2D body2 = bodySortedList[contact.Body2ID];

                if (contact.IsTrigger)
                {
                    body1.RigidBody.OnParallelTriggerExit(body2.RigidBody);
                    body2.RigidBody.OnParallelTriggerExit(body1.RigidBody);
                }
                else
                {
                    _tempCollision.SetContact(contact, body2.RigidBody);
                    body1.RigidBody.OnParallelCollisionExit(_tempCollision);

                    _tempCollision.SetContact(contact, body1.RigidBody);
                    body2.RigidBody.OnParallelCollisionExit(_tempCollision);
                }

                contact.state  = ContactState.Inactive;
                currentWrapper = currentWrapper.next;
            }

            //call contact stay callback
            currentWrapper = _allContactWrapperHead;

            for (int i = 0; i < _allContactCount; i++)
            {
                PContact2D contact = currentWrapper.contact;

                if (contact.state == ContactState.Active)
                {
                    PBody2D body1 = bodySortedList[contact.Body1ID];
                    PBody2D body2 = bodySortedList[contact.Body2ID];

                    if (contact.IsTrigger)
                    {
                        body1.RigidBody.OnParallelTriggerStay(body2.RigidBody);
                        body2.RigidBody.OnParallelTriggerStay(body1.RigidBody);
                    }
                    else
                    {
                        _tempCollision.SetContact(contact, body2.RigidBody);
                        body1.RigidBody.OnParallelCollisionStay(_tempCollision);

                        _tempCollision.SetContact(contact, body1.RigidBody);
                        body2.RigidBody.OnParallelCollisionStay(_tempCollision);
                    }
                }

                currentWrapper = currentWrapper.next;
            }

            //call contact enter callback
            currentWrapper = _enterContactWrapperHead;

            for (int i = 0; i < _enterContactCount; i++)
            {
                PContact2D contact = currentWrapper.contact;
                PBody2D    body1   = bodySortedList[contact.Body1ID];
                PBody2D    body2   = bodySortedList[contact.Body2ID];

                if (contact.IsTrigger)
                {
                    body1.RigidBody.OnParallelTriggerEnter(body2.RigidBody);
                    body2.RigidBody.OnParallelTriggerEnter(body1.RigidBody);
                }
                else
                {
                    _tempCollision.SetContact(contact, body2.RigidBody);
                    body1.RigidBody.OnParallelCollisionEnter(_tempCollision);

                    _tempCollision.SetContact(contact, body1.RigidBody);
                    body2.RigidBody.OnParallelCollisionEnter(_tempCollision);
                }

                contact.state  = ContactState.Active;
                currentWrapper = currentWrapper.next;
            }
        }