Пример #1
0
        private void CreateLandSurface()
        {
            DiffuseMaterial _landMaterial     = (DiffuseMaterial)this.FindResource("LandMaterial");
            DiffuseMaterial _landBackMaterial = (DiffuseMaterial)this.FindResource("LandBackMaterial");
            GeometryModel3D _landModel        = new GeometryModel3D();

            _landModel.Material     = _landMaterial;
            _landModel.BackMaterial = _landBackMaterial;

            double         _landSize      = JsdTile.GetProfileXSize(this.ViewModel.Structure.IsHighDefenition) * 5;
            MeshGeometry3D _landGeometry  = new MeshGeometry3D();
            List <Point3D> _landPositions = new List <Point3D>(4);
            double         _landLevel     = -this.ViewModel.Center.Z;

            _landPositions.Add(new Point3D(-_landSize, _landLevel, -_landSize));
            _landPositions.Add(new Point3D(-_landSize, _landLevel, _landSize));
            _landPositions.Add(new Point3D(_landSize, _landLevel, _landSize));
            _landPositions.Add(new Point3D(_landSize, _landLevel, -_landSize));

            List <int> _landIndeces = new List <int>()
            {
                0, 1, 2, 2, 3, 0
            };

            _landGeometry.Positions       = new Point3DCollection(_landPositions);
            _landGeometry.TriangleIndices = new Int32Collection(_landIndeces);
            _landModel.Geometry           = _landGeometry;
            this.mgShape.Children.Add(_landModel);
        }
Пример #2
0
        private void CreateLandSurface()
        {
            DiffuseMaterial _landMaterial     = (DiffuseMaterial)this.FindResource("LandMaterial");
            DiffuseMaterial _landBackMaterial = (DiffuseMaterial)this.FindResource("LandBackMaterial");
            GeometryModel3D _landModel        = new GeometryModel3D();

            _landModel.Material     = _landMaterial;
            _landModel.BackMaterial = _landBackMaterial;

            int     _landSize   = 5;
            Point3D _tileCenter = this.ViewModel.TileCenter;
            Point3D _center     = this.ViewModel.Center;
            double  _shiftX     = 2 * _tileCenter.X - _center.X;
            double  _shiftY     = 2 * _tileCenter.Y - _center.Y;
            double  _landLevel  = -_center.Z;

            double         _tileSize      = JsdTile.GetProfileXSize(this.ViewModel.Structure.IsHighDefenition);
            MeshGeometry3D _landGeometry  = new MeshGeometry3D();
            List <Point3D> _landPositions = new List <Point3D>(_landSize * _landSize * 4 * 4);
            List <int>     _landIndeces   = new List <int>(_landSize * _landSize * 4 * 6);

            int _tileCount   = 0;
            int _xStartIndex = (int)(-_landSize - _shiftX / _tileSize);
            int _xEndIndex   = _xStartIndex + 2 * _landSize;
            int _yStartIndex = (int)(-_landSize - _shiftY / _tileSize);
            int _yEndIndex   = _yStartIndex + 2 * _landSize;

            for (int i = _xStartIndex; i < _xEndIndex; i++)
            {
                for (int j = _yStartIndex; j < _yEndIndex; j++)
                {
                    if ((i + j) % 2 == 0)
                    {
                        continue;
                    }

                    _landPositions.Add(new Point3D(
                                           _tileSize * (i - 1) + _shiftX, _landLevel, _tileSize * (j - 1) + _shiftY));
                    _landPositions.Add(new Point3D(
                                           _tileSize * i + _shiftX, _landLevel, _tileSize * (j - 1) + _shiftY));
                    _landPositions.Add(new Point3D(
                                           _tileSize * i + _shiftX, _landLevel, _tileSize * j + _shiftY));
                    _landPositions.Add(new Point3D(
                                           _tileSize * (i - 1) + _shiftX, _landLevel, _tileSize * j + _shiftY));

                    int _startIndex = _tileCount * 4;
                    _landIndeces.AddRange(new List <int>()
                    {
                        _startIndex + 0, _startIndex + 3, _startIndex + 2,
                        _startIndex + 2, _startIndex + 1, _startIndex + 0
                    });
                    _tileCount++;
                }
            }

            _landGeometry.Positions       = new Point3DCollection(_landPositions);
            _landGeometry.TriangleIndices = new Int32Collection(_landIndeces);
            _landModel.Geometry           = _landGeometry;
            this.mgShape.Children.Add(_landModel);
        }
Пример #3
0
        private void AddTile(TileViewModel aTile)
        {
            GeometryModel3D _tileGeometry = new GeometryModel3D();

            _tileGeometry.Geometry     = new MeshGeometry3D();
            _tileGeometry.Material     = this.FTileMaterial;
            _tileGeometry.BackMaterial = this.FBackTileMaterial;

            TileGeometry _tile = new TileGeometry(
                aTile,
                _tileGeometry,
                null,
                this.ViewModel.Structure.IsHighDefenition,
                this.ViewModel.Center);

            this.FTiles.Add(_tile);

            int _tileSize   = JsdTile.GetProfileXSize(aTile.IsHighDefenition);
            int _tileBottom = aTile.TileIsOnRoof ? JsdTile.GetProfileZSize(aTile.IsHighDefenition) : 0;

            foreach (LayerCellViewModel _cell in aTile.ShapeViewModel.Cells)
            {
                if (_cell.LayerCellValue)
                {
                    _tile.AttachCube(_cell.X, _cell.Y, _cell.Z * 2, false, _tileSize, _tileBottom, false);
                }
            }

            //_tile.JoinCubeSides();

            _tile.UpdateTileGeometry();

            this.mgShape.Children.Add(_tileGeometry);
        }
Пример #4
0
        public void AddJsdTile(JsdTile aTile)
        {
            this.FStructure.AddTile(aTile);
            TileViewModel _tileViewModel = new TileViewModel(aTile);

            this.Tiles.Add(_tileViewModel);
            this.SelectedTile = _tileViewModel;
        }
Пример #5
0
 public TileViewModel(JsdTile aTile)
 {
     this.FTile                            = aTile;
     this.FShapeViewModel                  = new ShapeViewModel(this.FTile.IsHighDefenition);
     this.FShapeViewModel.Shape            = this.FTile.Shape;
     this.FShapeViewModel.PropertyChanged += ShapeViewModel_PropertyChanged;
     this.PropertyChanged                 += TileViewModel_PropertyChanged;
 }
Пример #6
0
        public void Execute(object parameter)
        {
            StructureViewModel _viewModel    = (StructureViewModel)parameter;
            TileViewModel      _selectedTile = _viewModel.SelectedTile;
            JsdTile            _rotatedTile  = _selectedTile.Tile.Clone();

            _rotatedTile.Rotate(false);
            _viewModel.AddJsdTile(_rotatedTile);
        }
Пример #7
0
        public void BuildMap()
        {
            int _mapSize = this.ViewModel.Map.WORLD_SIZE;

            for (int i = 0; i < _mapSize; i++)
            {
                for (int j = 0; j < _mapSize; j++)
                {
                    for (int k = 0; k < this.ViewModel.DrewLayers.Length; k++)
                    {
                        if (k == 1 || k == 3 || !this.ViewModel.DrewLayers[k])
                        {
                            continue;
                        }

                        MapElement element = this.ViewModel.Map.Elementes[_mapSize * j + i];

                        foreach (LevelNode.TileIndex tileIndex in element.pLevelNodes[k].tileIndexes)
                        {
                            int     _subIndex = tileIndex.usTypeSubIndex - 1;
                            JsdFile _jsdFile  = this.ViewModel.Map.MapTileSet[tileIndex.ubType].Jsd;

                            if (_jsdFile == null)
                            {
                                continue;
                            }

                            JsdStruct _jsdStruct = _jsdFile.Structs.
                                                   SingleOrDefault(x => x.StructureNumber == _subIndex);

                            if (_jsdStruct != null)
                            {
                                for (int l = 0; l < _jsdStruct.Tiles.Length; l++)
                                {
                                    JsdTile _tile = _jsdStruct.Tiles[l].Clone();
                                    if (k > 3)
                                    {
                                        _tile.Flags |= JsdTile.JsdTileFlags.TILE_ON_ROOF;
                                    }
                                    _tile.XPosRelToBase += (sbyte)(i - _mapSize / 2);
                                    _tile.YPosRelToBase += (sbyte)(j - _mapSize / 2);
                                    GeometryModel3D _tileGeometry = this.AddTile(_tile);
                                    this.FLayers[k].Add(_tileGeometry);
                                }
                            }

                            if (this.FPh.Progress < 0)
                            {
                                return;
                            }
                        }
                    }
                }
                this.FPh.Progress = i * 100 / _mapSize;
            }
        }
Пример #8
0
        public void Execute(object parameter)
        {
            StructureViewModel _viewModel = (StructureViewModel)parameter;
            JsdTile            _tile      = _viewModel.SelectedTile.Tile.Clone();

            _viewModel.Structure.AddTile(_tile);
            TileViewModel _tileViewModel = new TileViewModel(_tile);

            _viewModel.Tiles.Add(_tileViewModel);
            _viewModel.SelectedTile = _tileViewModel;
        }
Пример #9
0
        public void Execute(object parameter)
        {
            StructureViewModel _viewModel = (StructureViewModel)parameter;
            JsdTile            _tile      = new JsdTile(_viewModel.IsHighDefenition);

            _viewModel.Structure.AddTile(_tile);
            TileViewModel _tileViewModel = new TileViewModel(_tile);

            _viewModel.Tiles.Add(_tileViewModel);
            _viewModel.SelectedTile = _tileViewModel;
        }
Пример #10
0
        private void AddTile(TileViewModel aTile)
        {
            GeometryModel3D _tileGeometry = new GeometryModel3D();

            _tileGeometry.Geometry = new MeshGeometry3D();

            GeometryModel3D _altTileGeometry = new GeometryModel3D();

            _altTileGeometry.Geometry = new MeshGeometry3D();

            if (aTile.IsSelected)
            {
                _tileGeometry.Material        = this.FSelectedTileMaterial;
                _tileGeometry.BackMaterial    = this.FSelectedBackTileMaterial;
                _altTileGeometry.Material     = this.FAltSelectedTileMaterial;
                _altTileGeometry.BackMaterial = this.FAltSelectedTileMaterial;
            }
            else
            {
                _tileGeometry.Material        = this.FTileMaterial;
                _tileGeometry.BackMaterial    = this.FBackTileMaterial;
                _altTileGeometry.Material     = this.FAltTileMaterial;
                _altTileGeometry.BackMaterial = this.FAltTileMaterial;
            }

            TileGeometry _tile = new TileGeometry(
                aTile,
                _tileGeometry,
                _altTileGeometry,
                this.ViewModel.Structure.IsHighDefenition,
                this.ViewModel.Center);

            this.FTiles.Add(_tile);

            int _tileSize   = JsdTile.GetProfileXSize(aTile.IsHighDefenition);
            int _tileBottom = aTile.TileIsOnRoof ? JsdTile.GetProfileZSize(aTile.IsHighDefenition) : 0;

            foreach (LayerCellViewModel _cell in aTile.ShapeViewModel.Cells)
            {
                if (_cell.LayerCellValue)
                {
                    _tile.AddCube(_cell.X, _cell.Y, _cell.Z, _tileSize, _tileBottom);
                    this.ViewModel.FilledPositionCount++;
                }
                _cell.AttachHandler(this, Cell_PropertyChanged);
            }

            _tile.UpdateTileGeometry();

            this.mgShape.Children.Add(_tileGeometry);
            this.mgShape.Children.Add(_altTileGeometry);
        }
Пример #11
0
        public TileGeometry(JsdTile aTile,
                            GeometryModel3D aTileGeometry,
                            bool aIsHighDefenition,
                            Point3D aCenter)
        {
            this.FTile     = aTile;
            this.FGeometry = aTileGeometry;

            this.FIsHighDefenition = aIsHighDefenition;
            this.FSides            = new List <CubeSide>();

            this.FCenter = aCenter;
        }
Пример #12
0
        private void ProcessCell(LayerCellViewModel aCell, TileViewModel aTile)
        {
            TileGeometry _tile       = this.FTiles.Where(x => x.Tile == aTile).SingleOrDefault();
            int          _tileSize   = JsdTile.GetProfileXSize(aTile.IsHighDefenition);
            int          _tileBottom = aTile.TileIsOnRoof ? JsdTile.GetProfileZSize(aTile.IsHighDefenition) : 0;

            if (aCell.LayerCellValue)
            {
                _tile.AddCube(aCell.X, aCell.Y, aCell.Z, _tileSize, _tileBottom);
                this.ViewModel.FilledPositionCount++;
            }
            else
            {
                _tile.RemoveCube(aCell.X, aCell.Y, aCell.Z, _tileSize, _tileBottom);
                this.ViewModel.FilledPositionCount--;
            }

            _tile.UpdateTileGeometry();
        }
Пример #13
0
        public void ExpandData()
        {
            if (this.FSize == JsdTile.MinSize * 2)
            {
                return;
            }

            byte[] _expandedData = new byte[JsdTile.MinSize * 2 * JsdTile.MinSize * 2];
            for (int i = 0; i < JsdTile.MinSize; i++)
            {
                byte _ijValue = JsdTile.DublicateBits(this.Shape[i]);
                _expandedData[i * 2]                  = _ijValue;
                _expandedData[i * 2 + 1]              = _ijValue;
                _expandedData[i * 2 + this.FSize]     = _ijValue;
                _expandedData[i * 2 + this.FSize + 1] = _ijValue;
            }

            this.FSize   = JsdTile.MinSize * 2;
            this.FHeight = JsdTile.MinHeight * 2;

            this.Shape = _expandedData;
        }
Пример #14
0
        private GeometryModel3D AddTile(JsdTile aTile)
        {
            int _tileSize   = JsdTile.GetProfileXSize(aTile.IsHighDefenition);
            int _tileBottom = (aTile.Flags & JsdTile.JsdTileFlags.TILE_ON_ROOF) > 0 ?
                              JsdTile.GetProfileZSize(aTile.IsHighDefenition) : 0;

            GeometryModel3D _tileGeometry = new GeometryModel3D();

            _tileGeometry.Geometry     = new MeshGeometry3D();
            _tileGeometry.Material     = this.FTileMaterial;
            _tileGeometry.BackMaterial = this.FBackTileMaterial;

            TileGeometry _tile = new TileGeometry(
                aTile,
                _tileGeometry,
                aTile.IsHighDefenition,
                this.ViewModel.Center);

            for (int i = 0; i < aTile.ProfileSize; i++)
            {
                int y = i % aTile.ProfileXSize;
                int x = i / aTile.ProfileXSize;
                for (int z = 0; z < aTile.ProfileZSize; z++)
                {
                    int _mask = 1 << z;
                    if ((aTile.Shape[i] & _mask) > 0)
                    {
                        _tile.AttachCube(x, y, z * 2, false, _tileSize, _tileBottom);
                    }
                }
            }

            //_tile.JoinCubeSides();
            _tile.UpdateTileGeometry();
            this.mgShape.Children.Add(_tileGeometry);
            return(_tileGeometry);
        }