本文整理汇总了C#中Pathfinding.TriangleMeshNode.DeserializeNode方法的典型用法代码示例。如果您正苦于以下问题:C# TriangleMeshNode.DeserializeNode方法的具体用法?C# TriangleMeshNode.DeserializeNode怎么用?C# TriangleMeshNode.DeserializeNode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pathfinding.TriangleMeshNode
的用法示例。
在下文中一共展示了TriangleMeshNode.DeserializeNode方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DeserializeExtraInfo
public override void DeserializeExtraInfo (GraphSerializationContext ctx) {
//NavMeshGraph.DeserializeMeshNodes (this,nodes,bytes);
System.IO.BinaryReader reader = ctx.reader;
tileXCount = reader.ReadInt32();
if (tileXCount < 0) return;
tileZCount = reader.ReadInt32();
tiles = new NavmeshTile[tileXCount * tileZCount];
//Make sure mesh nodes can reference this graph
TriangleMeshNode.SetNavmeshHolder (ctx.graphIndex, this);
for (int z=0;z<tileZCount;z++) {
for (int x=0;x<tileXCount;x++) {
int tileIndex = x + z*tileXCount;
int tx = reader.ReadInt32();
if (tx < 0) throw new System.Exception ("Invalid tile coordinates (x < 0)");
int tz = reader.ReadInt32();
if (tz < 0) throw new System.Exception ("Invalid tile coordinates (z < 0)");
// This is not the origin of a large tile. Refer back to that tile.
if (tx != x || tz != z) {
tiles[tileIndex] = tiles[tz*tileXCount + tx];
continue;
}
NavmeshTile tile = new NavmeshTile ();
tile.x = tx;
tile.z = tz;
tile.w = reader.ReadInt32();
tile.d = reader.ReadInt32();
tile.bbTree = new BBTree (tile);
tiles[tileIndex] = tile;
int trisCount = reader.ReadInt32 ();
if (trisCount % 3 != 0) throw new System.Exception ("Corrupt data. Triangle indices count must be divisable by 3. Got " + trisCount);
tile.tris = new int[trisCount];
for (int i=0;i<tile.tris.Length;i++) tile.tris[i] = reader.ReadInt32();
tile.verts = new Int3[reader.ReadInt32()];
for (int i=0;i<tile.verts.Length;i++) {
tile.verts[i] = new Int3 (reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32());
}
int nodeCount = reader.ReadInt32();
tile.nodes = new TriangleMeshNode[nodeCount];
//Prepare for storing in vertex indices
tileIndex <<= TileIndexOffset;
for (int i=0;i<tile.nodes.Length;i++) {
TriangleMeshNode node = new TriangleMeshNode (active);
tile.nodes[i] = node;
node.GraphIndex = (uint)ctx.graphIndex;
node.DeserializeNode (ctx);
node.v0 = tile.tris[i*3+0] | tileIndex;
node.v1 = tile.tris[i*3+1] | tileIndex;
node.v2 = tile.tris[i*3+2] | tileIndex;
node.UpdatePositionFromVertices();
tile.bbTree.Insert (node);
}
}
}
}
示例2: DeserializeExtraInfo
public override void DeserializeExtraInfo(GraphSerializationContext ctx)
{
BinaryReader reader = ctx.reader;
this.tileXCount = reader.ReadInt32();
if (this.tileXCount < 0)
{
return;
}
this.tileZCount = reader.ReadInt32();
this.tiles = new RecastGraph.NavmeshTile[this.tileXCount * this.tileZCount];
TriangleMeshNode.SetNavmeshHolder(ctx.graphIndex, this);
for (int i = 0; i < this.tileZCount; i++)
{
for (int j = 0; j < this.tileXCount; j++)
{
int num = j + i * this.tileXCount;
int num2 = reader.ReadInt32();
if (num2 < 0)
{
throw new Exception("Invalid tile coordinates (x < 0)");
}
int num3 = reader.ReadInt32();
if (num3 < 0)
{
throw new Exception("Invalid tile coordinates (z < 0)");
}
if (num2 != j || num3 != i)
{
this.tiles[num] = this.tiles[num3 * this.tileXCount + num2];
}
else
{
RecastGraph.NavmeshTile navmeshTile = new RecastGraph.NavmeshTile();
navmeshTile.x = num2;
navmeshTile.z = num3;
navmeshTile.w = reader.ReadInt32();
navmeshTile.d = reader.ReadInt32();
navmeshTile.bbTree = new BBTree();
this.tiles[num] = navmeshTile;
int num4 = reader.ReadInt32();
if (num4 % 3 != 0)
{
throw new Exception("Corrupt data. Triangle indices count must be divisable by 3. Got " + num4);
}
navmeshTile.tris = new int[num4];
for (int k = 0; k < navmeshTile.tris.Length; k++)
{
navmeshTile.tris[k] = reader.ReadInt32();
}
navmeshTile.verts = new Int3[reader.ReadInt32()];
for (int l = 0; l < navmeshTile.verts.Length; l++)
{
navmeshTile.verts[l] = new Int3(reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32());
}
int num5 = reader.ReadInt32();
navmeshTile.nodes = new TriangleMeshNode[num5];
num <<= 12;
for (int m = 0; m < navmeshTile.nodes.Length; m++)
{
TriangleMeshNode triangleMeshNode = new TriangleMeshNode(this.active);
navmeshTile.nodes[m] = triangleMeshNode;
triangleMeshNode.DeserializeNode(ctx);
triangleMeshNode.v0 = (navmeshTile.tris[m * 3] | num);
triangleMeshNode.v1 = (navmeshTile.tris[m * 3 + 1] | num);
triangleMeshNode.v2 = (navmeshTile.tris[m * 3 + 2] | num);
triangleMeshNode.UpdatePositionFromVertices();
}
navmeshTile.bbTree.RebuildFrom(navmeshTile.nodes);
}
}
}
}