Ejemplo n.º 1
0
        /// <summary>
        /// CalcGridForSkin
        /// </summary>
        /// <param name="i"></param>
        /// <param name="j"></param>
        /// <param name="k"></param>
        /// <param name="skin"></param>
        private void CalcGridForSkin(out int i, out int j, out int k, CollisionSkin skin)
        {
            Vector3 sides = skin.WorldBoundingBox.Max - skin.WorldBoundingBox.Min;

            if ((sides.X > dx) || (sides.Y > dy) || (sides.Z > dz))
            {
                System.Diagnostics.Debug.WriteLine("CollisionSkin too big for gridding system - putting it into overflow list.");
                i = j = k = -1;
                return;
            }

            Vector3 min = skin.WorldBoundingBox.Min;

            min.X = JiggleMath.Wrap(min.X, 0.0f, sizeX);
            min.Y = JiggleMath.Wrap(min.Y, 0.0f, sizeY);
            min.Z = JiggleMath.Wrap(min.Z, 0.0f, sizeZ);

            i = (int)(min.X / dx) % nx;
            j = (int)(min.Y / dy) % ny;
            k = (int)(min.Z / dz) % nz;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// CalcGridForSkin
        /// </summary>
        /// <param name="i"></param>
        /// <param name="j"></param>
        /// <param name="k"></param>
        /// <param name="fi"></param>
        /// <param name="fj"></param>
        /// <param name="fk"></param>
        /// <param name="skin"></param>
        public void CalcGridForSkin(out int i, out int j, out int k, out float fi,
                                    out float fj, out float fk, CollisionSkin skin)
        {
            Vector3 sides = skin.WorldBoundingBox.Max - skin.WorldBoundingBox.Min;

            if ((sides.X > dx) || (sides.Y > dy) || (sides.Z > dz))
            {
                System.Diagnostics.Debug.WriteLine("CollisionSkin too big for gridding system - putting it into overflow list.");

                i  = j = k = -1;
                fi = fj = fk = 0.0f;
                return;
            }

            Vector3 min = skin.WorldBoundingBox.Min;

            min.X = JiggleMath.Wrap(min.X, 0.0f, sizeX);
            min.Y = JiggleMath.Wrap(min.Y, 0.0f, sizeY);
            min.Z = JiggleMath.Wrap(min.Z, 0.0f, sizeZ);

            fi = min.X / dx;
            fj = min.Y / dy;
            fk = min.Z / dz;

            i = (int)fi;
            j = (int)fj;
            k = (int)fk;

            if (i < 0)
            {
                i = 0; fi = 0.0f;
            }
            else if (i >= (int)nx)
            {
                i = 0; fi = 0.0f;
            }
            else
            {
                fi -= (float)i;
            }

            if (j < 0)
            {
                j = 0; fj = 0.0f;
            }
            else if (j >= (int)ny)
            {
                j = 0; fj = 0.0f;
            }
            else
            {
                fj -= (float)j;
            }

            if (k < 0)
            {
                k = 0; fk = 0.0f;
            }
            else if (k >= (int)nz)
            {
                k = 0; fk = 0.0f;
            }
            else
            {
                fk -= (float)k;
            }
        }