public CachedScene(Scene scene) { Scene = scene; if (scene.IsValid == false) { throw new ArgumentException("Scene is not valid (lacking navmesh!)"); } foreach (var cell in scene.SceneInfo.NavZone.NavCells) { //Logging.Write(cell.ToString()); } Scene.NavMesh nm = scene.Mesh; X = scene.Mesh.Position.X; Y = scene.Mesh.Position.Y; //DumpNavCellsToBitmap(scene); SizeX = scene.Mesh.SquareCountX; SizeY = scene.Mesh.SquareCountY; SceneId = scene.SceneGuid; int myOffset; /*if (SizeY == 96) myOffset = DB_Retarded_Offset / (96 / SizeY); else myOffset = SizeY;*/ myOffset = 89; Collisions = new NavMeshSquare[SizeX, SizeY]; Logging.Write("Scene: " + scene.Name+" "+ SizeX+"*"+SizeY); NavMeshSquare[] tmpGrid; if (scene.SceneInfo.NavMeshDef == null) { Logging.Write("NavMeshDef = null"); throw new Exception("Invalid NavMesh Grid"); } try { tmpGrid = scene.SceneInfo.NavMeshDef.NavMeshGrid; } catch (Exception e) { throw new Exception(e.Message); } Logging.Write("" + 5); /*for (int i = 0; i < tmpGrid.Length; i++ ) { int x = i%SizeY; int y = i/SizeY; //if (x < myOffset) // if((x + (SizeX - myOffset) < SizeX)) Collisions[x + (SizeX - myOffset), y] = tmpGrid[i]; //else // Collisions[x - myOffset, y] = tmpGrid[i]; Collisions[x, y] = tmpGrid[i]; }*/ /* for (int x = 0; x < SizeX; x++) { for (int y = 0; y < SizeY; y++) { if (x > DB_Retarded_Offset) { Collisions[x - myOffset, y] = tmpGrid[y * SizeY + x]; } else { if ((x + (SizeX - myOffset) < SizeX)) Collisions[x + (SizeX - myOffset), y] = tmpGrid[y * SizeY + x]; } } } */ //pt.Save(SceneId + ".bmp"); //Multiverse.GetCurrentMap().DrawMap(this.SceneId); }
public void Parse(GameBitBuffer buffer) { Field0 = new NavMeshSquare(); Field0.Parse(buffer); Field1 = new int[4]; for(int i = 0;i < _Field1.Length;i++) _Field1[i] = buffer.ReadInt(32); Field2 = buffer.ReadInt(32); Field3 = buffer.ReadInt(32); }
public NavMeshDef(MpqFileStream stream) { SquaresCountX = stream.ReadInt32(); SquaresCoountY = stream.ReadInt32(); i0 = stream.ReadInt32(); NavMeshSquareCount = stream.ReadInt32(); f0 = stream.ReadFloat(); serNavMeshArraySquares = new SerializeData(stream); long x = stream.Position; stream.Position = serNavMeshArraySquares.Offset + 16; NavMeshArraySquares = new NavMeshSquare[NavMeshSquareCount]; for (int i = 0; i < NavMeshSquareCount; i++) { NavMeshArraySquares[i] = new NavMeshSquare(stream); } stream.Position = x; stream.Position += 12; filename = new char[256]; for (int i = 0; i < 256; i++) { filename[i] = (char) stream.ReadByte(); // fix me / dark } }
public CachedScene(Scene scene) { if (scene.IsValid == false) { throw new ArgumentException("Scene is not valid (lacking navmesh!)"); } foreach (var cell in scene.SceneInfo.NavZone.NavCells) { //Logging.Write(cell.ToString()); } Scene.NavMesh nm = scene.Mesh; X = scene.Mesh.Position.X; Y = scene.Mesh.Position.Y; SizeX = scene.Mesh.SquareCountX; SizeY = scene.Mesh.SquareCountY; SceneId = scene.SceneGuid; int myOffset; if (SizeY == 96) myOffset = DB_Retarded_Offset / (96 / SizeY); else myOffset = SizeY; Collisions = new NavMeshSquare[SizeX, SizeY]; //Logging.Write("Scene: " + scene.Name+" "+ // SizeX+"*"+SizeY); NavMeshSquare[] tmpGrid; if (scene.SceneInfo.NavMeshDef == null) { Logging.Write("NavMeshDef = null"); throw new Exception("Invalid NavMesh Grid"); } try { tmpGrid = scene.SceneInfo.NavMeshDef.NavMeshGrid; } catch (Exception e) { throw new Exception(e.Message); } for (int i = 0; i < tmpGrid.Length; i++ ) { int x = i%SizeY; int y = i/SizeY; if (x < myOffset) if((x + (SizeX - myOffset) < SizeX)) Collisions[x + (SizeX - myOffset), y] = tmpGrid[i]; else Collisions[x - myOffset, y] = tmpGrid[i]; //Collisions[x, y] = tmpGrid[i]; /*if (Collisions[x,y].Flags.HasFlag(Zeta.Internals.SNO.NavCellFlags.AllowWalk)) { //g.DrawRectangle(my_pen, (float)x, (float)y, (float)2, (float)2); if (x < myOffset) g.DrawRectangle(my_pen2, (float)(x + (SizeX - myOffset)), (float)y, (float)2, (float)2); else g.DrawRectangle(my_pen2, (float)(x - myOffset), (float)y, (float)2, (float)2); }*/ } //pt.Save(scene.Name+".bmp"); /*for (int x = 0; x < SizeX; x++) { for (int y = 0; y < SizeY; y++) { if (x > DB_Retarded_Offset) { Collisions[x - DB_Retarded_Offset, y] = tmpGrid[y * SizeY + x]; } else { if (x + (SizeX - DB_Retarded_Offset) < SizeX) Collisions[x+(SizeX - DB_Retarded_Offset), y] = tmpGrid[y * SizeY + x]; } if (tmpGrid[y*SizeY + x].Flags.HasFlag(Zeta.Internals.SNO.NavCellFlags.AllowWalk)) { if (x > DB_Retarded_Offset) { g.DrawRectangle(my_pen, (float)x - DB_Retarded_Offset, (float)y, (float)2, (float)2); } else { if (x + (SizeX - DB_Retarded_Offset) < SizeX) g.DrawRectangle(my_pen, (float)x+(SizeX-DB_Retarded_Offset) , (float)y, (float)2, (float)2); } } } }*/ //pt.Save(SceneId + ".bmp"); }