@@ -35,12 +35,14 @@ enum MENU_ID {
35
35
RECALCULATE_AABB ,
36
36
}
37
37
38
+ var _plugin : EditorPlugin = null
38
39
var _grass_selected = null
39
40
var _tools_menu :PopupMenu = null
40
41
41
42
42
- func set_plugin (_plugin :EditorPlugin ) -> void :
43
+ func set_plugin (plugin :EditorPlugin ) -> void :
43
44
var popup := get_popup ()
45
+ _plugin = plugin
44
46
_tools_menu = PopupMenu .new ()
45
47
_tools_menu .name = & "ToolsMenu"
46
48
_tools_menu .add_check_item ("Follow terrain's normal" , MENU_ID .TOOL_FOLLOW_NORMAL )
@@ -50,7 +52,7 @@ func set_plugin(_plugin :EditorPlugin) -> void:
50
52
popup .add_separator ()
51
53
popup .add_item ("Auto center position" , MENU_ID .AUTO_CENTER_POSITION )
52
54
popup .add_item ("Recalculate custom AABB" , MENU_ID .RECALCULATE_AABB )
53
- popup .add_check_item ("Bake height map" , MENU_ID .BAKE_HEIGHT_MAP )
55
+ popup .add_item ("Bake height map" , MENU_ID .BAKE_HEIGHT_MAP )
54
56
popup .add_check_item ("Cast shadow" , MENU_ID .CAST_SHADOW )
55
57
popup .add_item ("Global parameters" , MENU_ID .GLOBAL_PARAMETERS )
56
58
popup .add_separator ()
@@ -71,7 +73,12 @@ func set_current_grass(grass_selected) -> void:
71
73
popup .set_item_checked (popup .get_item_index (MENU_ID .CAST_SHADOW ), false )
72
74
else :
73
75
popup .set_item_checked (popup .get_item_index (MENU_ID .CAST_SHADOW ), true )
74
- popup .set_item_checked (popup .get_item_index (MENU_ID .BAKE_HEIGHT_MAP ), _grass_selected .baked_height_map != null )
76
+ if _grass_selected .baked_height_map != null :
77
+ popup .set_item_text (popup .get_item_index (MENU_ID .BAKE_HEIGHT_MAP ), "Bake height map (already baked)" )
78
+ popup .set_item_disabled (popup .get_item_index (MENU_ID .BAKE_HEIGHT_MAP ), true )
79
+ else :
80
+ popup .set_item_text (popup .get_item_index (MENU_ID .BAKE_HEIGHT_MAP ), "Bake height map" )
81
+ popup .set_item_disabled (popup .get_item_index (MENU_ID .BAKE_HEIGHT_MAP ), false )
75
82
_tools_menu .set_item_checked (_tools_menu .get_item_index (MENU_ID .TOOL_FOLLOW_NORMAL ), _grass_selected .sgt_follow_normal )
76
83
77
84
@@ -80,14 +87,30 @@ func _on_sgt_menu_button(id :int) -> void:
80
87
return
81
88
match id :
82
89
MENU_ID .AUTO_CENTER_POSITION :
90
+ _plugin .get_undo_redo ().create_action (_grass_selected .name + " Auto Center Position" )
91
+ _plugin .get_undo_redo ().add_undo_property (_grass_selected , & "baked_height_map" , _grass_selected .baked_height_map )
92
+ _plugin .get_undo_redo ().add_undo_property (_grass_selected , & "multimesh" , _grass_selected .multimesh )
93
+ _plugin .get_undo_redo ().add_undo_property (_grass_selected , & "global_position" , _grass_selected .global_position )
83
94
_grass_selected .auto_center_position ()
95
+ _plugin .get_undo_redo ().add_do_property (_grass_selected , & "baked_height_map" , _grass_selected .baked_height_map )
96
+ _plugin .get_undo_redo ().add_do_property (_grass_selected , & "multimesh" , _grass_selected .multimesh )
97
+ _plugin .get_undo_redo ().add_do_property (_grass_selected , & "global_position" , _grass_selected .global_position )
98
+ _plugin .get_undo_redo ().commit_action ()
84
99
MENU_ID .RECALCULATE_AABB :
100
+ _plugin .get_undo_redo ().create_action (_grass_selected .name + " Recalculate Custom AABB" )
101
+ _plugin .get_undo_redo ().add_undo_property (_grass_selected , & "custom_aabb" , _grass_selected .custom_aabb )
85
102
_grass_selected .recalculate_custom_aabb ()
103
+ _plugin .get_undo_redo ().add_do_property (_grass_selected , & "custom_aabb" , _grass_selected .custom_aabb )
104
+ _plugin .get_undo_redo ().commit_action ()
86
105
MENU_ID .CAST_SHADOW :
106
+ _plugin .get_undo_redo ().create_action (_grass_selected .name + " Toogle Cast Shadow" )
107
+ _plugin .get_undo_redo ().add_undo_property (_grass_selected , & "cast_shadow" , _grass_selected .cast_shadow )
87
108
if _grass_selected .cast_shadow == GeometryInstance3D .SHADOW_CASTING_SETTING_OFF :
88
109
_grass_selected .cast_shadow = GeometryInstance3D .SHADOW_CASTING_SETTING_ON
89
110
else :
90
111
_grass_selected .cast_shadow = GeometryInstance3D .SHADOW_CASTING_SETTING_OFF
112
+ _plugin .get_undo_redo ().add_do_property (_grass_selected , & "cast_shadow" , _grass_selected .cast_shadow )
113
+ _plugin .get_undo_redo ().commit_action ()
91
114
MENU_ID .BAKE_HEIGHT_MAP :
92
115
_grass_selected .bake_height_map ()
93
116
MENU_ID .GLOBAL_PARAMETERS :
@@ -121,4 +144,10 @@ func _on_about_to_popup() -> void:
121
144
func _on_clear_all_confirmation_dialog_confirmed () -> void :
122
145
if _grass_selected == null :
123
146
return
147
+ _plugin .get_undo_redo ().create_action (_grass_selected .name + " Clear All Grass" )
148
+ _plugin .get_undo_redo ().add_undo_property (_grass_selected , & "baked_height_map" , _grass_selected .baked_height_map )
149
+ _plugin .get_undo_redo ().add_undo_property (_grass_selected , & "multimesh" , _grass_selected .multimesh )
124
150
_grass_selected .clear_all ()
151
+ _plugin .get_undo_redo ().add_do_property (_grass_selected , & "baked_height_map" , _grass_selected .baked_height_map )
152
+ _plugin .get_undo_redo ().add_do_property (_grass_selected , & "multimesh" , _grass_selected .multimesh )
153
+ _plugin .get_undo_redo ().commit_action ()
0 commit comments