| 1150 | } |
| 1151 | |
| 1152 | void GridMapEditor::_notification(int p_what) { |
| 1153 | switch (p_what) { |
| 1154 | case NOTIFICATION_ENTER_TREE: { |
| 1155 | mesh_library_palette->connect(SceneStringName(item_selected), callable_mp(this, &GridMapEditor::_item_selected_cbk)); |
| 1156 | |
| 1157 | const RID scenario = get_tree()->get_root()->get_world_3d()->get_scenario(); |
| 1158 | |
| 1159 | for (int i = 0; i < 3; i++) { |
| 1160 | grid[i] = RS::get_singleton()->mesh_create(); |
| 1161 | grid_instance[i] = RS::get_singleton()->instance_create2(grid[i], scenario); |
| 1162 | RenderingServer::get_singleton()->instance_set_layer_mask(grid_instance[i], 1 << Node3DEditorViewport::MISC_TOOL_LAYER); |
| 1163 | selection_level_instance[i] = RenderingServer::get_singleton()->instance_create2(selection_level_mesh[i], scenario); |
| 1164 | RenderingServer::get_singleton()->instance_set_layer_mask(selection_level_instance[i], 1 << Node3DEditorViewport::MISC_TOOL_LAYER); |
| 1165 | } |
| 1166 | |
| 1167 | cursor_instance = RenderingServer::get_singleton()->instance_create2(cursor_mesh, scenario); |
| 1168 | RenderingServer::get_singleton()->instance_set_layer_mask(cursor_instance, 1 << Node3DEditorViewport::MISC_TOOL_LAYER); |
| 1169 | RenderingServer::get_singleton()->instance_set_visible(cursor_instance, false); |
| 1170 | selection_instance = RenderingServer::get_singleton()->instance_create2(selection_mesh, scenario); |
| 1171 | RenderingServer::get_singleton()->instance_set_layer_mask(selection_instance, 1 << Node3DEditorViewport::MISC_TOOL_LAYER); |
| 1172 | paste_instance = RenderingServer::get_singleton()->instance_create2(paste_mesh, scenario); |
| 1173 | RenderingServer::get_singleton()->instance_set_layer_mask(paste_instance, 1 << Node3DEditorViewport::MISC_TOOL_LAYER); |
| 1174 | |
| 1175 | _update_selection_transform(); |
| 1176 | _update_paste_indicator(); |
| 1177 | _update_theme(); |
| 1178 | } break; |
| 1179 | |
| 1180 | case NOTIFICATION_EXIT_TREE: { |
| 1181 | _clear_clipboard_data(); |
| 1182 | |
| 1183 | for (int i = 0; i < 3; i++) { |
| 1184 | RS::get_singleton()->free(grid_instance[i]); |
| 1185 | RS::get_singleton()->free(grid[i]); |
| 1186 | grid_instance[i] = RID(); |
| 1187 | grid[i] = RID(); |
| 1188 | RenderingServer::get_singleton()->free(selection_level_instance[i]); |
| 1189 | } |
| 1190 | |
| 1191 | RenderingServer::get_singleton()->free(cursor_instance); |
| 1192 | RenderingServer::get_singleton()->free(selection_instance); |
| 1193 | RenderingServer::get_singleton()->free(paste_instance); |
| 1194 | cursor_instance = RID(); |
| 1195 | selection_instance = RID(); |
| 1196 | paste_instance = RID(); |
| 1197 | } break; |
| 1198 | |
| 1199 | case NOTIFICATION_PROCESS: { |
| 1200 | if (!node) { |
| 1201 | return; |
| 1202 | } |
| 1203 | |
| 1204 | Transform3D xf = node->get_global_transform(); |
| 1205 | |
| 1206 | if (xf != grid_xform) { |
| 1207 | for (int i = 0; i < 3; i++) { |
| 1208 | RS::get_singleton()->instance_set_transform(grid_instance[i], xf * edit_grid_xform); |
| 1209 | } |
nothing calls this directly
no test coverage detected