summaryrefslogtreecommitdiff
path: root/scene/resources
diff options
context:
space:
mode:
authorAnarchid <anarchid@mail.ru>2016-04-20 21:19:05 +0300
committerAnarchid <anarchid@mail.ru>2016-04-20 21:19:05 +0300
commit73ca83184894f7c6a24178b25095088c7b4c508c (patch)
treeec1dfc5421dbe45af33a06fe9b1e679a6281b5a7 /scene/resources
parent15d1fca0614ad87fd16fa7532e4db867b342d00e (diff)
Implement GridMap support for navigation meshes
Diffstat (limited to 'scene/resources')
-rw-r--r--scene/resources/mesh_library.cpp26
-rw-r--r--scene/resources/mesh_library.h5
2 files changed, 30 insertions, 1 deletions
diff --git a/scene/resources/mesh_library.cpp b/scene/resources/mesh_library.cpp
index 76bb1c585f..2b1d022299 100644
--- a/scene/resources/mesh_library.cpp
+++ b/scene/resources/mesh_library.cpp
@@ -48,6 +48,8 @@ bool MeshLibrary::_set(const StringName& p_name, const Variant& p_value) {
set_item_shape(idx,p_value);
else if(what=="preview")
set_item_preview(idx,p_value);
+ else if(what=="navmesh")
+ set_item_navmesh(idx,p_value);
else
return false;
@@ -70,6 +72,8 @@ bool MeshLibrary::_get(const StringName& p_name,Variant &r_ret) const {
r_ret= get_item_mesh(idx);
else if(what=="shape")
r_ret= get_item_shape(idx);
+ else if(what=="navmesh")
+ r_ret= get_item_navmesh(idx);
else if(what=="preview")
r_ret= get_item_preview(idx);
else
@@ -86,6 +90,7 @@ void MeshLibrary::_get_property_list( List<PropertyInfo> *p_list) const {
p_list->push_back( PropertyInfo(Variant::STRING,name+"name"));
p_list->push_back( PropertyInfo(Variant::OBJECT,name+"mesh",PROPERTY_HINT_RESOURCE_TYPE,"Mesh"));
p_list->push_back( PropertyInfo(Variant::OBJECT,name+"shape",PROPERTY_HINT_RESOURCE_TYPE,"Shape"));
+ p_list->push_back( PropertyInfo(Variant::OBJECT,name+"navmesh",PROPERTY_HINT_RESOURCE_TYPE,"NavigationMesh"));
p_list->push_back( PropertyInfo(Variant::OBJECT,name+"preview",PROPERTY_HINT_RESOURCE_TYPE,"Texture",PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_EDITOR_HELPER));
}
}
@@ -130,6 +135,18 @@ void MeshLibrary::set_item_shape(int p_item,const Ref<Shape>& p_shape) {
}
+
+void MeshLibrary::set_item_navmesh(int p_item,const Ref<NavigationMesh>& p_navmesh) {
+
+ ERR_FAIL_COND(!item_map.has(p_item));
+ item_map[p_item].navmesh=p_navmesh;
+ _change_notify();
+ notify_change_to_owners();
+ emit_changed();
+ _change_notify();
+
+}
+
void MeshLibrary::set_item_preview(int p_item,const Ref<Texture>& p_preview) {
ERR_FAIL_COND(!item_map.has(p_item));
@@ -157,6 +174,13 @@ Ref<Shape> MeshLibrary::get_item_shape(int p_item) const {
return item_map[p_item].shape;
}
+Ref<NavigationMesh> MeshLibrary::get_item_navmesh(int p_item) const {
+
+ ERR_FAIL_COND_V(!item_map.has(p_item),Ref<NavigationMesh>());
+ return item_map[p_item].navmesh;
+}
+
+
Ref<Texture> MeshLibrary::get_item_preview(int p_item) const {
ERR_FAIL_COND_V(!item_map.has(p_item),Ref<Texture>());
@@ -223,9 +247,11 @@ void MeshLibrary::_bind_methods() {
ObjectTypeDB::bind_method(_MD("create_item","id"),&MeshLibrary::create_item);
ObjectTypeDB::bind_method(_MD("set_item_name","id","name"),&MeshLibrary::set_item_name);
ObjectTypeDB::bind_method(_MD("set_item_mesh","id","mesh:Mesh"),&MeshLibrary::set_item_mesh);
+ ObjectTypeDB::bind_method(_MD("set_item_navmesh","id","navmesh:NavigationMesh"),&MeshLibrary::set_item_navmesh);
ObjectTypeDB::bind_method(_MD("set_item_shape","id","shape:Shape"),&MeshLibrary::set_item_shape);
ObjectTypeDB::bind_method(_MD("get_item_name","id"),&MeshLibrary::get_item_name);
ObjectTypeDB::bind_method(_MD("get_item_mesh:Mesh","id"),&MeshLibrary::get_item_mesh);
+ ObjectTypeDB::bind_method(_MD("get_item_navmesh:NavigationMesh","id"),&MeshLibrary::get_item_navmesh);
ObjectTypeDB::bind_method(_MD("get_item_shape:Shape","id"),&MeshLibrary::get_item_shape);
ObjectTypeDB::bind_method(_MD("remove_item","id"),&MeshLibrary::remove_item);
ObjectTypeDB::bind_method(_MD("clear"),&MeshLibrary::clear);
diff --git a/scene/resources/mesh_library.h b/scene/resources/mesh_library.h
index bf0107d7a9..e4dba193fc 100644
--- a/scene/resources/mesh_library.h
+++ b/scene/resources/mesh_library.h
@@ -33,6 +33,7 @@
#include "mesh.h"
#include "shape.h"
#include "map.h"
+#include "scene/3d/navigation_mesh.h"
class MeshLibrary : public Resource {
@@ -40,11 +41,11 @@ class MeshLibrary : public Resource {
RES_BASE_EXTENSION("gt");
struct Item {
-
String name;
Ref<Mesh> mesh;
Ref<Shape> shape;
Ref<Texture> preview;
+ Ref<NavigationMesh> navmesh;
};
Map<int,Item> item_map;
@@ -62,10 +63,12 @@ public:
void create_item(int p_item);
void set_item_name(int p_item,const String& p_name);
void set_item_mesh(int p_item,const Ref<Mesh>& p_mesh);
+ void set_item_navmesh(int p_item, const Ref<NavigationMesh>& p_navmesh);
void set_item_shape(int p_item,const Ref<Shape>& p_shape);
void set_item_preview(int p_item,const Ref<Texture>& p_preview);
String get_item_name(int p_item) const;
Ref<Mesh> get_item_mesh(int p_item) const;
+ Ref<NavigationMesh> get_item_navmesh(int p_item) const;
Ref<Shape> get_item_shape(int p_item) const;
Ref<Texture> get_item_preview(int p_item) const;