Пример #1
0
        public Vector3d GetProperPosi(Vector3d v1, Vector3d v2, out bool hitx, out bool hity)
        {
            var  offset = v2 - v1;
            long x = v1.x, y = v1.y;

            hitx = hity = false;
            if (offset.x > 0)
            {
                var testPosi = v1 + new Vector3d(offset.x + FixedMath.Half, 0, 0);
                if (IsInObstacle(testPosi))
                {
                    hitx = true;
                    x    = FixedMath.Floor(testPosi.x) - FixedMath.One / 2 - 1;
                    DLog.Log(x.ToFloat() + " " + v1.ToString() + " " + v2);
                }
            }
            else if (offset.x < 0)
            {
                var testPosi = v1 + new Vector3d(offset.x - FixedMath.Half, 0, 0);
                if (IsInObstacle(testPosi))
                {
                    hitx = true;
                    x    = FixedMath.Floor(testPosi.x) + FixedMath.One / 2 + 1;
                }
            }
            if (offset.y > 0)
            {
                var testPosi = v1 + new Vector3d(0, offset.y + FixedMath.One * 2, 0);
                if (IsInObstacle(testPosi))
                {
                    hity = true;
                    y    = FixedMath.Floor(testPosi.y) - FixedMath.One * 2 - 1;
                }
            }
            else if (offset.y < 0)
            {
                var testPosi = v1 + new Vector3d(0, offset.y, 0);
                if (IsInObstacle(testPosi))
                {
                    hity = true;
                    y    = FixedMath.Floor(testPosi.y) + FixedMath.One + 1;
                }
            }
            Vector3d v = new Vector3d(hitx? x : v2.x, hity?y:v2.y, 0);

            return(v);
        }