@tool class_name DialogicPositionEvent extends DialogicEvent ## Event that allows moving of positions (and characters that are on that position). ## Requires the Portraits subsystem to be present! enum Actions {SET_RELATIVE, SET_ABSOLUTE, RESET, RESET_ALL} ### Settings ## The type of action: SetRelative, SetAbsolute, Reset, ResetAll var action := Actions.SET_RELATIVE ## The position that should be affected var position: int = 0 ## A vector representing a relative change or an absolute position (for SetRelative and SetAbsolute) var vector: Vector2 = Vector2() ## The time the tweening will take. var movement_time: float = 0 ################################################################################ ## EXECUTE ################################################################################ func _execute() -> void: var final_movement_time: float = movement_time if dialogic.Inputs.auto_skip.enabled: var time_per_event: float = dialogic.Inputs.auto_skip.time_per_event final_movement_time = max(movement_time, time_per_event) match action: Actions.SET_RELATIVE: dialogic.Portraits.move_portrait_position(position, vector, true, final_movement_time) Actions.SET_ABSOLUTE: dialogic.Portraits.move_portrait_position(position, vector, false, final_movement_time) Actions.RESET_ALL: dialogic.Portraits.reset_all_portrait_positions(final_movement_time) Actions.RESET: dialogic.Portraits.reset_portrait_position(position, final_movement_time) finish() ################################################################################ ## INITIALIZE ################################################################################ func _init() -> void: event_name = "Position" set_default_color('Color2') event_category = "Other" event_sorting_index = 2 func _get_icon() -> Resource: return load(self.get_script().get_path().get_base_dir().path_join('event_portrait_position.svg')) ################################################################################ ## SAVING/LOADING ################################################################################ func get_shortcode() -> String: return "update_position" func get_shortcode_parameters() -> Dictionary: return { #param_name : property_info "action" : {"property": "action", "default": Actions.SET_RELATIVE, "suggestions": func(): return {"Set Relative":{'value':0, 'text_alt':['set_relative', 'relative']}, "Set Absolute":{'value':1, 'text_alt':['set_absolute', 'absolute']}, "Reset":{'value':2,'text_alt':['reset'] }, "Reset All":{'value':3,'text_alt':['reset_all']}}}, "position" : {"property": "position", "default": 0}, "vector" : {"property": "vector", "default": Vector2()}, "time" : {"property": "movement_time", "default": 0}, } ################################################################################ ## EDITOR REPRESENTATION ################################################################################ func build_event_editor(): add_header_edit('action', ValueType.FIXED_OPTIONS, { 'options': [ { 'label': 'Change', 'value': Actions.SET_RELATIVE, }, { 'label': 'Set', 'value': Actions.SET_ABSOLUTE, }, { 'label': 'Reset', 'value': Actions.RESET, }, { 'label': 'Reset All', 'value': Actions.RESET_ALL, } ] }) add_header_edit("position", ValueType.NUMBER, {'left_text':"position", 'mode':1}, 'action != Actions.RESET_ALL') add_header_label('to (absolute)', 'action == Actions.SET_ABSOLUTE') add_header_label('by (relative)', 'action == Actions.SET_RELATIVE') add_header_edit("vector", ValueType.VECTOR2, {}, 'action != Actions.RESET and action != Actions.RESET_ALL') add_body_edit("movement_time", ValueType.NUMBER, {'left_text':"AnimationTime:", "right_text":"(0 for instant)"})