Exemplo n.º 1
0
    private void DrawWorld(int CentrX, int CentrY, int CentrZ, int Dist)
    {
        //print("Всего объектов на сцене: " + this.transform.childCount.ToString());

        Vector3 CenterPos = new Vector3(CentrX, CentrY, CentrZ);

        if ((int)Vector3.Magnitude(CenterPos - DrawLastPosition) > 1 && refreshTimer < 0)
        {
            DrawLastPosition = CenterPos;
            refreshTimer     = RefreshTimer;

            //Определяем минимальные и максимальные значения координат объектов
            int x_min = (CentrX - Dist < 0) ? 0 : CentrX - Dist;
            int x_max = (CentrX + Dist > MatrixWorld.matrix.GetLength(0)) ? MatrixWorld.matrix.GetLength(0) : CentrX + Dist;
            int y_min = (CentrY - Dist < 0) ? 0 : CentrY - Dist;
            int y_max = (CentrY + Dist > MatrixWorld.matrix.GetLength(1)) ? MatrixWorld.matrix.GetLength(1) : CentrY + Dist;
            int z_min = (CentrZ - Dist < 0) ? 0 : CentrZ - Dist;
            int z_max = (CentrZ + Dist > MatrixWorld.matrix.GetLength(2)) ? MatrixWorld.matrix.GetLength(2) : CentrZ + Dist;

            //Центр в расчете перерисовки
            Vector3 posCentr = new Vector3(CentrX, CentrY, CentrZ);

            //Отключаем объекты за зоной активности
            //for(int i=0;i<this.transform.childCount;i++)
            //{
            //	int distOut = (int)Vector3.Magnitude(posCentr - this.transform.GetChild(i).transform.position);
            //	if(distOut > Dist)
            //	{
            //		// Отключаем куб
            //		MatrixWorld.AddDeactiveObject(this.transform.GetChild(i).gameObject);
            //	}
            //}

            //Создаем объекты игрового мира или достаем из отключенных
            for (int x = x_min; x < x_max; x++)
            {
                for (int z = z_min; z < z_max; z++)
                {
                    for (int y = y_min; y < y_max; y++)
                    {
                        // Сравним растояние между объектом и позицией центра
                        Vector3 posObject = new Vector3(x, y, z);
                        int     dist      = (int)Vector3.Magnitude(posCentr - posObject);

                        if (dist < Dist)
                        {
                            if (MatrixWorld.matrix[x, y, z] == 1)
                            {
                                // Создаем куб
                                MatrixWorld.CreateObject(posObject, inGameObject, this.transform);
                            }
                        }
                    }
                }
            }
        }
    }