-
-
Notifications
You must be signed in to change notification settings - Fork 249
/
voxel_instancer_stat_view.cpp
65 lines (51 loc) · 1.73 KB
/
voxel_instancer_stat_view.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "voxel_instancer_stat_view.h"
#include "../../terrain/instancing/voxel_instance_library.h"
#include "../../terrain/instancing/voxel_instance_library_item.h"
#include "../../terrain/instancing/voxel_instancer.h"
#include "../../util/godot/classes/node.h"
#include "../../util/godot/classes/tree.h"
namespace zylann::voxel {
VoxelInstancerStatView::VoxelInstancerStatView() {
_tree = memnew(Tree);
_tree->set_columns(2);
_tree->set_select_mode(Tree::SELECT_ROW);
_tree->set_v_size_flags(Control::SIZE_EXPAND_FILL);
_tree->set_column_expand_ratio(0, 1);
_tree->set_column_expand_ratio(1, 3);
add_child(_tree);
}
void VoxelInstancerStatView::set_instancer(const VoxelInstancer *instancer) {
_instancer = instancer;
set_process(_instancer != nullptr);
}
void VoxelInstancerStatView::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_PROCESS:
process();
break;
}
}
void VoxelInstancerStatView::process() {
ERR_FAIL_COND(_instancer == nullptr);
const VoxelInstancer &instancer = *_instancer;
Ref<VoxelInstanceLibrary> library = instancer.get_library();
instancer.debug_get_instance_counts(_count_per_layer);
_tree->clear();
if (library.is_null()) {
return;
}
TreeItem *root = _tree->create_item();
_tree->set_hide_root(true);
for (auto it = _count_per_layer.begin(); it != _count_per_layer.end(); ++it) {
TreeItem *tree_item = _tree->create_item(root);
const VoxelInstanceLibraryItem *lib_item = library->get_item_const(it->first);
ERR_CONTINUE(lib_item == nullptr);
String name = lib_item->get_item_name();
if (name == "") {
name = "[" + String::num_int64(it->first) + "]";
}
tree_item->set_text(0, name);
tree_item->set_text(1, String::num_int64(it->second));
}
}
} // namespace zylann::voxel