public void Initialize(string filePath)
    {
        XmlDocument doc = new XmlDocument();

        doc.Load(filePath);
        MemoryStream ms = new MemoryStream();

        doc.Save(ms);

        byte[]       data      = ms.ToArray();
        MemoryStream navmeshMs = new MemoryStream(data);

        XmlSerializer     xmlSerializer     = new XmlSerializer(typeof(NavMeshSerializer));
        NavMeshSerializer navmeshSerializer = ((NavMeshSerializer)xmlSerializer.Deserialize(navmeshMs));

        LunaNav.NavMesh navmesh = navmeshSerializer.Reconstitute();
        InitializeQuery(navmesh);

        Crowd = new Crowd();

        Crowd.Init(50, 0.6f, _navMeshQuery.NavMesh);
        Crowd.Filter = filter;

        initializedCrowd = true;
    }
 public void LoadLevel(string levelName)
 {
     NavMeshQuery = NavMeshSerializer.CreateMeshQuery(NavMeshSerializer.Deserialize("Levels/" + levelName + ".nav"));
     //The YOffset requires the world to have a valid NavMesh-Position at (0,0,0)
     Pathfinder.YOffset = Pathfinder.GetClosestPointOnNavMesh(NavMeshQuery, TundraVector3.Create(0f, 0f, 0f)).Y;
     AddEntity(new Monster {
         Name = "Monster", Position = TundraVector3.Zero
     });
 }
Beispiel #3
0
    public void Initialize(string filePath)
    {
        TextAsset    asset = Resources.Load(filePath, typeof(TextAsset)) as TextAsset;
        MemoryStream f     = new MemoryStream(asset.bytes);

        XmlSerializer     xmlSerializer     = new XmlSerializer(typeof(NavMeshSerializer));
        NavMeshSerializer navmeshSerializer = ((NavMeshSerializer)xmlSerializer.Deserialize(f));

        LunaNav.NavMesh navmesh = navmeshSerializer.Reconstitute();
        InitializeQuery(navmesh);


        Crowd = new Crowd();
        Crowd.Init(50, 0.6f, _navMeshQuery.NavMesh);
        Crowd.Filter = filter;

        initializedCrowd = true;
    }
    /// <summary>
    /// Sets up the GUI so users can export the NavMesh data into XML or Binary formats
    /// </summary>
    public override void OnInspectorGUI()
    {
        var catagoryStyle = new GUIStyle();

        catagoryStyle.fontStyle = FontStyle.Bold;
        RecastNavMesh recastNavMesh = target as RecastNavMesh;

        if (recastNavMesh == null || recastNavMesh.NavMesh == null)
        {
            return;
        }
        _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition, false, false); //Last two bools are if we want to show the scroll bar always.

        EditorGUILayout.BeginVertical();
        if (fold == null)
        {
            fold = new bool[recastNavMesh.NavMesh._tiles.Length];
        }
        if (fold.Length != recastNavMesh.NavMesh._tiles.Length)
        {
            var temp = new bool[recastNavMesh.NavMesh._tiles.Length];
            Array.Copy(fold, 0, temp, 0, fold.Length);
            fold = temp;
        }
        for (int i = 0; i < recastNavMesh.NavMesh._tiles.Length; i++)
        {
            if (recastNavMesh.NavMesh._tiles[i] != null && recastNavMesh.NavMesh._tiles[i].Verts != null && recastNavMesh.NavMesh._tiles[i].Verts.Length != 0)
            {
                fold[i] = EditorGUILayout.Foldout(fold[i], new GUIContent(string.Format("{0}, {1}", recastNavMesh.NavMesh._tiles[i].Header.X, recastNavMesh.NavMesh._tiles[i].Header.Y)));
                if (fold[i])
                {
                    if (GUILayout.Button("Remove Tile"))
                    {
                        recastNavMesh.RemoveTile(recastNavMesh.NavMesh._tiles[i].Header.X, recastNavMesh.NavMesh._tiles[i].Header.Y);
                        recastNavMesh.BuildGeometry();
                    }
                    if (GUILayout.Button("Rebuild Tile"))
                    {
                        recastNavMesh.BuildTile(recastNavMesh.NavMesh._tiles[i].Header.X, recastNavMesh.NavMesh._tiles[i].Header.Y);
                        recastNavMesh.BuildGeometry();
                    }
                }
            }
        }
        EditorGUILayout.Separator();
        EditorGUILayout.PrefixLabel("Rebuild", GUIStyle.none, catagoryStyle);

        if (GUILayout.Button("Rebuild Geometry"))
        {
            recastNavMesh.RebuildTiles();
        }
        EditorGUILayout.Separator();
        EditorGUILayout.PrefixLabel("Visualize", GUIStyle.none, catagoryStyle);

        recastNavMesh.Mat = EditorGUILayout.ObjectField("Material", recastNavMesh.Mat, typeof(Material), true) as Material;
        if (GUILayout.Button("Toggle Geometry"))
        {
            recastNavMesh.Toggle();
        }

        //if (GUILayout.Button("Draw Voxel Geometry"))
        //{
        //    recastNavMesh.BuildVoxelGeometry();
        //    recastNavMesh.DrawVoxelGeometry();
        //}
        //if (GUILayout.Button("Create Walkable Voxel Geometry"))
        //{
        //    recastNavMesh.BuildWalkableVoxelGeometry();
        //    recastNavMesh.DrawWalkableVoxelGeometry();
        //}

        //if (GUILayout.Button("Create PolyMesh"))
        //{
        //    recastNavMesh.BuildPolyMeshGeometry();
        //    recastNavMesh.DrawPolyMeshGeometry();
        //}

        EditorGUILayout.Separator();
        EditorGUILayout.PrefixLabel("Output", GUIStyle.none, catagoryStyle);
        if (GUILayout.Button("Export XML"))
        {
            var path = EditorUtility.SaveFilePanel("Export NavMesh", "", "NavMesh.xml", "xml");

            if (path.Length > 0)
            {
                FileStream f = null;
                if (File.Exists(path))
                {
                    File.Delete(path);
                }

                f = File.Create(path);
                NavMeshSerializer serializer = new NavMeshSerializer(recastNavMesh.NavMesh);

                XmlSerializer xmlSerializer = new XmlSerializer(typeof(NavMeshSerializer));
                xmlSerializer.Serialize(f, serializer);

                f.Close();
            }
        }
        if (GUILayout.Button("Export JSON"))
        {
            var path = EditorUtility.SaveFilePanel("Export NavMesh", "", "NavMesh.json", "json");

            if (path.Length > 0)
            {
                FileStream f = null;
                if (File.Exists(path))
                {
                    File.Delete(path);
                }

                f = File.Create(path);
                NavMeshSerializer serializer = new NavMeshSerializer(recastNavMesh.NavMesh);

                using (StreamWriter sw = new StreamWriter(f))
                    using (JsonWriter jw = new JsonTextWriter(sw))
                    {
                        jw.Formatting = (Recast.Json.Formatting)Formatting.Indented;

                        JsonSerializer b = new JsonSerializer();
                        b.Serialize(jw, serializer);
                    }
                f.Close();
            }
        }
        if (GUILayout.Button("Export Binary JSON"))
        {
            var path = EditorUtility.SaveFilePanel("Export NavMesh", "", "NavMesh.dat", "dat");

            if (path.Length > 0)
            {
                if (File.Exists(path))
                {
                    File.Delete(path);
                }

                NavMeshSerializer serializer = new NavMeshSerializer(recastNavMesh.NavMesh);

                using (FileStream f = File.Create(path))
                    using (BsonWriter writer = new BsonWriter(f))
                    {
                        JsonSerializer b = new JsonSerializer();
                        b.Serialize(writer, serializer);
                    }
            }
        }

        if (GUILayout.Button("Export for WebPlayer"))
        {
            var path = EditorUtility.SaveFilePanel("Export NavMesh", "", "NavMesh.bytes", "bytes");

            if (path.Length > 0)
            {
                FileStream f = null;
                if (File.Exists(path))
                {
                    File.Delete(path);
                }

                f = File.Create(path);
                NavMeshSerializer serializer = new NavMeshSerializer(recastNavMesh.NavMesh);

                XmlSerializer xmlSerializer = new XmlSerializer(typeof(NavMeshSerializer));
                var           xmlWriter     = new XmlTextWriter(f, Encoding.UTF8);
                xmlSerializer.Serialize(xmlWriter, serializer);

                f.Close();
            }
        }
        EditorGUILayout.EndVertical();
        EditorGUILayout.EndScrollView();
    }