Exemplo n.º 1
0
        public bool Grab(Body other)
        {
            if (!IsGrabbed(other) && GrabbedComponents.Count < MaxGrabs)
            {
                Matrix m = Matrix.Identity;
                m                     = GlobalTransform;
                m.Translation         = GlobalTransform.Translation + new Vector3(0, 0.0f, 0.5f);
                other.GlobalTransform = m;

                GrabbedItem item = new GrabbedItem
                {
                    Component      = other,
                    LocalTransform = Matrix.Invert(GlobalTransform) * other.GlobalTransform
                };

                GrabbedComponents.Add(item);

                other.LocalTransform = item.LocalTransform;
                AddChild(other);
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 2
0
        private void RemoveComponent(Body component)
        {
            int i     = 0;
            int index = -1;

            foreach (GrabbedItem grabbed in GrabbedComponents)
            {
                if (grabbed.Component == component)
                {
                    index = i;
                    break;
                }
                i++;
            }

            if (index >= 0)
            {
                GrabbedComponents.RemoveAt(index);
            }
        }
Exemplo n.º 3
0
 public bool IsGrabbed(Body component)
 {
     return(GrabbedComponents.Any(item => item.Component == component));
 }
Exemplo n.º 4
0
 public Body GetFirstGrab()
 {
     return(GrabbedComponents.Count <= 0 ? null : GrabbedComponents.First().Component);
 }