void NavigationMeshInstance::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { Spatial *c = this; while (c) { navigation = c->cast_to<Navigation>(); if (navigation) { if (enabled && navmesh.is_valid()) { nav_id = navigation->navmesh_create(navmesh, get_relative_transform(navigation), this); } break; } c = c->get_parent_spatial(); } if (navmesh.is_valid() && get_tree()->is_debugging_navigation_hint()) { MeshInstance *dm = memnew(MeshInstance); dm->set_mesh(navmesh->get_debug_mesh()); if (is_enabled()) { dm->set_material_override(get_tree()->get_debug_navigation_material()); } else { dm->set_material_override(get_tree()->get_debug_navigation_disabled_material()); } add_child(dm); debug_view = dm; } } break; case NOTIFICATION_TRANSFORM_CHANGED: { if (navigation && nav_id != -1) { navigation->navmesh_set_transform(nav_id, get_relative_transform(navigation)); } } break; case NOTIFICATION_EXIT_TREE: { if (navigation) { if (nav_id != -1) { navigation->navmesh_remove(nav_id); nav_id = -1; } } if (debug_view) { debug_view->queue_delete(); debug_view = NULL; } navigation = NULL; } break; } }
void NavigationMeshInstance::set_enabled(bool p_enabled) { if (enabled==p_enabled) return; enabled=p_enabled; if (!is_inside_scene()) return; if (!enabled) { if (nav_id!=-1) { navigation->navmesh_remove(nav_id); nav_id=-1; } } else { if (navigation) { if (navmesh.is_valid()) { nav_id = navigation->navmesh_create(navmesh,get_relative_transform(navigation)); } } } update_gizmo(); }
void NavigationMeshInstance::_notification(int p_what) { switch(p_what) { case NOTIFICATION_ENTER_SCENE: { Spatial *c=this; while(c) { navigation=c->cast_to<Navigation>(); if (navigation) { if (enabled && navmesh.is_valid()) { nav_id = navigation->navmesh_create(navmesh,get_relative_transform(navigation)); } break; } c=c->get_parent_spatial(); } } break; case NOTIFICATION_TRANSFORM_CHANGED: { if (navigation && nav_id!=-1) { navigation->navmesh_set_transform(nav_id,get_relative_transform(navigation)); } } break; case NOTIFICATION_EXIT_SCENE: { if (navigation) { if (nav_id!=-1) { navigation->navmesh_remove(nav_id); nav_id=-1; } } navigation=NULL; } break; } }
void NavigationMeshInstance::set_navigation_mesh(const Ref<NavigationMesh>& p_navmesh) { if (p_navmesh==navmesh) return; if (navigation && nav_id!=-1) { navigation->navmesh_remove(nav_id); nav_id=-1; } navmesh=p_navmesh; if (navigation && navmesh.is_valid() && enabled) { nav_id = navigation->navmesh_create(navmesh,get_relative_transform(navigation)); } update_gizmo(); }
void NavigationMeshInstance::set_enabled(bool p_enabled) { if (enabled==p_enabled) return; enabled=p_enabled; if (!is_inside_tree()) return; if (!enabled) { if (nav_id!=-1) { navigation->navmesh_remove(nav_id); nav_id=-1; } } else { if (navigation) { if (navmesh.is_valid()) { nav_id = navigation->navmesh_create(navmesh,get_relative_transform(navigation),this); } } } if (debug_view) { MeshInstance *dm=debug_view->cast_to<MeshInstance>(); if (is_enabled()) { dm->set_material_override( get_tree()->get_debug_navigation_material() ); } else { dm->set_material_override( get_tree()->get_debug_navigation_disabled_material() ); } } update_gizmo(); }
void NavigationMeshInstance::set_navigation_mesh(const Ref<NavigationMesh> &p_navmesh) { if (p_navmesh == navmesh) return; if (navigation && nav_id != -1) { navigation->navmesh_remove(nav_id); nav_id = -1; } navmesh = p_navmesh; if (navigation && navmesh.is_valid() && enabled) { nav_id = navigation->navmesh_create(navmesh, get_relative_transform(navigation), this); } if (debug_view && navmesh.is_valid()) { debug_view->cast_to<MeshInstance>()->set_mesh(navmesh->get_debug_mesh()); } update_gizmo(); update_configuration_warning(); }