195 lines
5.2 KiB
GDScript
195 lines
5.2 KiB
GDScript
@tool
|
|
extends "../utility/input_field_resource/input_field_resource.gd"
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# A middle-man between the plant and the UI/painting/placement logic
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
const Greenhouse_Plant = preload("greenhouse_plant.gd")
|
|
|
|
|
|
var plant_brush_active:bool = false
|
|
var plant_label:String = ''
|
|
var plant:Greenhouse_Plant = null
|
|
|
|
|
|
signal prop_action_executed_on_plant(prop_action, final_val, plant)
|
|
signal prop_action_executed_on_LOD_variant(prop_action, final_val, LOD_variant, plant)
|
|
signal req_octree_reconfigure(plant)
|
|
signal req_octree_recenter(plant)
|
|
signal req_import_plant_data(plant)
|
|
signal req_export_plant_data(plant)
|
|
signal req_import_greenhouse_data()
|
|
signal req_export_greenhouse_data()
|
|
|
|
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Initialization
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
func _init():
|
|
super()
|
|
set_meta("class", "Greenhouse_PlantState")
|
|
resource_name = "Greenhouse_PlantState"
|
|
# A workaround to trigger the initial creation of a plant
|
|
_set("plant/plant", plant)
|
|
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Signal forwarding
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
func on_changed_plant():
|
|
emit_changed()
|
|
|
|
func on_prop_action_executed_on_plant(prop_action, final_val, plant):
|
|
prop_action_executed_on_plant.emit(prop_action, final_val, plant)
|
|
|
|
func on_req_octree_reconfigure(plant):
|
|
req_octree_reconfigure.emit(plant)
|
|
|
|
func on_req_octree_recenter(plant):
|
|
req_octree_recenter.emit(plant)
|
|
|
|
func on_req_import_plant_data(plant):
|
|
req_import_plant_data.emit(plant)
|
|
|
|
func on_req_export_plant_data(plant):
|
|
req_export_plant_data.emit(plant)
|
|
|
|
func on_req_import_greenhouse_data():
|
|
req_import_greenhouse_data.emit()
|
|
|
|
func on_req_export_greenhouse_data():
|
|
req_export_greenhouse_data.emit()
|
|
|
|
func on_prop_action_executed_on_LOD_variant(prop_action, final_val, LOD_variant, plant):
|
|
prop_action_executed_on_LOD_variant.emit(prop_action, final_val, LOD_variant, plant)
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Property management
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
func _modify_prop(prop:String, val):
|
|
match prop:
|
|
"plant/plant":
|
|
if !is_instance_of(val, Greenhouse_Plant):
|
|
val = Greenhouse_Plant.new()
|
|
|
|
FunLib.ensure_signal(val.changed, on_changed_plant)
|
|
FunLib.ensure_signal(val.prop_action_executed, on_prop_action_executed_on_plant, [val])
|
|
FunLib.ensure_signal(val.prop_action_executed_on_LOD_variant, on_prop_action_executed_on_LOD_variant, [val])
|
|
FunLib.ensure_signal(val.req_octree_reconfigure, on_req_octree_reconfigure, [val])
|
|
FunLib.ensure_signal(val.req_octree_recenter, on_req_octree_recenter, [val])
|
|
FunLib.ensure_signal(val.req_import_plant_data, on_req_import_plant_data, [val])
|
|
FunLib.ensure_signal(val.req_export_plant_data, on_req_export_plant_data, [val])
|
|
FunLib.ensure_signal(val.req_import_greenhouse_data, on_req_import_greenhouse_data)
|
|
FunLib.ensure_signal(val.req_export_greenhouse_data, on_req_export_greenhouse_data)
|
|
|
|
if val._undo_redo != _undo_redo:
|
|
val.set_undo_redo(_undo_redo)
|
|
return val
|
|
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Property export
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
func set_undo_redo(val):
|
|
super.set_undo_redo(val)
|
|
plant.set_undo_redo(_undo_redo)
|
|
|
|
|
|
func _get(prop):
|
|
match prop:
|
|
"plant/plant_brush_active":
|
|
return plant_brush_active
|
|
"plant/plant_label":
|
|
return plant_label
|
|
"plant/plant":
|
|
return plant
|
|
|
|
return null
|
|
|
|
|
|
func _set(prop, val):
|
|
var return_val = true
|
|
val = _modify_prop(prop, val)
|
|
|
|
match prop:
|
|
"plant/plant_brush_active":
|
|
plant_brush_active = val
|
|
"plant/plant_label":
|
|
plant_label = val
|
|
"plant/plant":
|
|
plant = val
|
|
_:
|
|
return_val = false
|
|
|
|
if return_val:
|
|
emit_changed()
|
|
return return_val
|
|
|
|
|
|
func _get_prop_dictionary():
|
|
return {
|
|
"plant/plant_brush_active":
|
|
{
|
|
"name": "plant/plant_brush_active",
|
|
"type": TYPE_BOOL,
|
|
"usage": PROPERTY_USAGE_DEFAULT,
|
|
"hint": PROPERTY_HINT_NONE
|
|
},
|
|
"plant/plant_label":
|
|
{
|
|
"name": "plant/plant_label",
|
|
"type": TYPE_STRING,
|
|
"usage": PROPERTY_USAGE_DEFAULT,
|
|
"hint": PROPERTY_HINT_NONE
|
|
},
|
|
"plant/plant":
|
|
{
|
|
"name": "plant/plant",
|
|
"type": TYPE_OBJECT ,
|
|
"usage": PROPERTY_USAGE_DEFAULT,
|
|
"hint": PROPERTY_HINT_RESOURCE_TYPE
|
|
},
|
|
}
|
|
|
|
|
|
func create_input_fields(_base_control:Control, _resource_previewer, whitelist:Array = []) -> Dictionary:
|
|
if plant:
|
|
return plant.create_input_fields(_base_control, _resource_previewer, whitelist)
|
|
return {}
|
|
|
|
|
|
func _fix_duplicate_signals(copy):
|
|
copy._modify_prop("plant/plant", copy.plant)
|
|
|
|
|
|
func get_prop_tooltip(prop:String) -> String:
|
|
match prop:
|
|
"plant/plant_brush_active":
|
|
return "The flag that defines if plant will be used during painting or not"
|
|
"plant/plant_brush_active":
|
|
return "The label to be displayed on top of the plant's thumbnail"
|
|
"plant/plant":
|
|
return "The contained plant itself"
|
|
|
|
return ""
|