Ejemplo n.º 1
0
        private static bool ContactOrientableTest(Vector2 ppos, Vector2 spos, float pw, float ph, float sw, float sh, ReflectableAndOrientable.Direction dir)
        {
            pw /= 2;
            ph /= 2;
            sw /= 2;
            sh /= 2;
            float eps = 0;

            if (Math.Abs(ppos.X - spos.X) >= pw + sw + 0.1 || Math.Abs(ppos.Y - spos.Y) >= ph + sh + 0.1)
            {
                return(false);
            }

            eps = 0.05f;
            if (dir == ReflectableAndOrientable.Direction.Left && ppos.X + pw - eps <= spos.X - sw &&
                ppos.Y + ph >= spos.Y - sh + eps && ppos.Y - ph <= spos.Y + sh - eps)
            {
                return(true);
            }
            else if (dir == ReflectableAndOrientable.Direction.Right && ppos.X - pw + eps >= spos.X + sw &&
                     ppos.Y + ph >= spos.Y - sh + eps && ppos.Y - ph <= spos.Y + sh - eps)
            {
                return(true);
            }
            else if (dir == ReflectableAndOrientable.Direction.Up && ppos.Y + ph - eps <= spos.Y - sh &&
                     ppos.X + pw >= spos.X - sw + eps && ppos.X - pw <= spos.X + sw - eps)
            {
                return(true);
            }
            else if (dir == ReflectableAndOrientable.Direction.Down && ppos.Y - ph + eps >= spos.Y + sh &&
                     ppos.X + pw >= spos.X - sw + eps && ppos.X - pw <= spos.X + sw - eps)
            {
                return(true);
            }
            return(false);
        }
Ejemplo n.º 2
0
        private static bool ContactOrientable(Vector2 ppos, Vector2 spos, float pw, float ph, float sw, float sh, ReflectableAndOrientable.Direction dir)
        {
            pw /= 2;
            ph /= 2;
            sw /= 2;
            sh /= 2;
            float eps = ContactManager.CONTACT_ORIENTABLE_EPS;

            if (Math.Abs(ppos.X - spos.X) >= pw + sw + 0.1 || Math.Abs(ppos.Y - spos.Y) >= ph + sh + 0.1)
            {
                return(false);
            }

            /*if (dir == ReflectableAndOrientable.Direction.Left && ppos.X + pw - eps <= spos.X - sw)
             *  return true;
             * else if (dir == ReflectableAndOrientable.Direction.Right && ppos.X - pw + eps >= spos.X + sw)
             *  return true;
             * else if (dir == ReflectableAndOrientable.Direction.Up && ppos.Y + ph - eps <= spos.Y - sh)
             *  return true;
             * else if (dir == ReflectableAndOrientable.Direction.Down && ppos.Y - ph + eps >= spos.Y + sh)
             *  return true;*/

            eps = 0.00f;
            if (dir == ReflectableAndOrientable.Direction.Left && ppos.X + pw - eps <= spos.X - sw &&
                ppos.Y + ph >= spos.Y - sh + eps && ppos.Y - ph <= spos.Y + sh - eps)
            {
                return(true);
            }
            else if (dir == ReflectableAndOrientable.Direction.Right && ppos.X - pw + eps >= spos.X + sw &&
                     ppos.Y + ph >= spos.Y - sh + eps && ppos.Y - ph <= spos.Y + sh - eps)
            {
                return(true);
            }
            else if (dir == ReflectableAndOrientable.Direction.Up && ppos.Y + ph - eps <= spos.Y - sh &&
                     ppos.X + pw >= spos.X - sw + eps && ppos.X - pw <= spos.X + sw - eps)
            {
                return(true);
            }
            else if (dir == ReflectableAndOrientable.Direction.Down && ppos.Y - ph + eps >= spos.Y + sh &&
                     ppos.X + pw >= spos.X - sw + eps && ppos.X - pw <= spos.X + sw - eps)
            {
                return(true);
            }
            return(false);
        }