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); }
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); }
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); }
public void AddJsdTile(JsdTile aTile) { this.FStructure.AddTile(aTile); TileViewModel _tileViewModel = new TileViewModel(aTile); this.Tiles.Add(_tileViewModel); this.SelectedTile = _tileViewModel; }
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; }
public void Execute(object parameter) { StructureViewModel _viewModel = (StructureViewModel)parameter; TileViewModel _selectedTile = _viewModel.SelectedTile; JsdTile _rotatedTile = _selectedTile.Tile.Clone(); _rotatedTile.Rotate(false); _viewModel.AddJsdTile(_rotatedTile); }
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; } }
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; }
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; }
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); }
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; }
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(); }
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; }
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); }