コード例 #1
0
ファイル: navigation_mesh.cpp プロジェクト: MattUV/godot
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;
	}
}
コード例 #2
0
ファイル: navigation_mesh.cpp プロジェクト: ErosOlmi/godot
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();
}
コード例 #3
0
ファイル: navigation_mesh.cpp プロジェクト: ErosOlmi/godot
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;
	}
}
コード例 #4
0
ファイル: navigation_mesh.cpp プロジェクト: ErosOlmi/godot
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();

}
コード例 #5
0
ファイル: navigation_mesh.cpp プロジェクト: baekdahl/godot
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();
}
コード例 #6
0
ファイル: navigation_mesh.cpp プロジェクト: MattUV/godot
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();
}