Exemplo n.º 1
0
        public void LoadRegion(GeoRegion region, ProgressEvent ev)
        {
            vis_tree.ClearTree();
            models.Clear();
            //
            setTreeBounds(region);
            //
            int      x, y, i = 0;
            int      max = REGION_SIZE * REGION_SIZE;
            GeoBlock block;
            Vector3  min = new Vector3();

            for (y = 0; y < REGION_SIZE; y++)
            {
                for (x = 0; x < REGION_SIZE; x++)
                {
                    block = region.getBlockByBlockXY(x, y);
                    foreach (GeoModel m in createBlock(block))
                    {
                        if (i == 0)
                        {
                            min = m.Position;
                        }
                        else
                        {
                            if (m.Position.X < min.X)
                            {
                                min.X = m.Position.X;
                            }
                            if (m.Position.Y > min.Y)
                            {
                                min.Y = m.Position.Y;
                            }
                            if (m.Position.Z < min.Z)
                            {
                                min.Z = m.Position.Z;
                            }
                        }
                        //
                        i++;
                    }
                    //
                    if (ev != null)
                    {
                        float p = (y * REGION_SIZE + x) / (float)max;
                        ev((int)(p * 100f));
                    }
                }
            }
            //
            Camera.Rotation.X = 45f;
            Camera.Position.X = min.X - 20f;
            Camera.Position.Z = min.Z - 20f;
            Camera.Position.Y = min.Y + 20f;
            Camera.UpdateWorldView();
        }