コード例 #1
0
        void PhysicsContactNotificationHandler(physics.EntityContactNotification contact)
        {
            foreach (physics.ShapeContact sc in contact.ShapeContacts)
            {
                // look up shape involved in collision and check its one of the bumper shapes
                pxContactSensor.ContactSensor s;
                if (!_bumperShapeToSensorTable.TryGetValue(sc.LocalShape, out s))
                {
                    continue;
                }
                if (contact.Stage == physics.ContactNotificationStage.Started)
                {
                    s.Pressed = true;
                }
                else if (contact.Stage == physics.ContactNotificationStage.Finished)
                {
                    s.Pressed = false;
                }
                s.TimeStamp = DateTime.Now;
                // notification for individual sensor
                _subMgrPort.Post(new submgr.Submit(s, dssp.DsspActions.UpdateRequest));
            }

            // send notification
            _subMgrPort.Post(new submgr.Submit(_state, dssp.DsspActions.ReplaceRequest));

            // reactivate notification handler
            Activate(Arbiter.Receive(false, _contactNotificationPort, PhysicsContactNotificationHandler));
        }
コード例 #2
0
        /// <summary>
        /// This handler receives a notification when the bumper contact state changes
        /// </summary>
        /// <param name="contact"></param>
        void ContactHandler(simcommon.EntityContactNotification contact)
        {
            if (contact.Stage == simcommon.ContactNotificationStage.Finished)
            {
                _entity.BumperLeft = _entity.BumperRight = false;
            }
            else
            {
                bool right = false;
                bool left  = false;
                foreach (simcommon.ShapeContact sc in contact.ShapeContacts)
                {
                    switch (sc.LocalShape.State.Name[sc.LocalShape.State.Name.Length - 2])
                    {
                    case 'L': left = true; break;

                    case 'R': right = true; break;

                    case 'B': left = true; right = true; break;
                    }
                }
                _entity.BumperLeft  = left;
                _entity.BumperRight = right;
            }
        }