37 lines
906 B
GDScript
37 lines
906 B
GDScript
@tool
|
|
extends ValidatorRule
|
|
class_name CustomRule
|
|
|
|
@export_multiline var expression: String = ""
|
|
|
|
var _expression: Expression = Expression.new()
|
|
|
|
|
|
func apply(control: Control, value) -> RuleResult:
|
|
var result = RuleResult.new()
|
|
if not _validate_expression():
|
|
result.passed = false
|
|
result.message = "Specified expression is not valid."
|
|
return result
|
|
var res = _expression.execute([ control, value ])
|
|
if _expression.has_execute_failed():
|
|
result.passed = false
|
|
result.message = "Execution of the specified expression has failed."
|
|
return result
|
|
result.passed = res == true
|
|
if not result.passed:
|
|
result.message = fail_message
|
|
return result
|
|
|
|
|
|
func is_valid() -> bool:
|
|
return _validate_expression()
|
|
|
|
|
|
func get_invalid_message() -> String:
|
|
return "Specified expression is not valid."
|
|
|
|
|
|
func _validate_expression() -> bool:
|
|
return _expression.parse(expression, [ "control", "value" ]) == OK
|