40 lines
1.2 KiB
GDScript
40 lines
1.2 KiB
GDScript
|
|
extends Resource
|
||
|
|
class_name FieldRequirement
|
||
|
|
|
||
|
|
|
||
|
|
func is_satisfied_at_position(grid: Grid, pos: Vector2i) -> bool:
|
||
|
|
match self.get_script():
|
||
|
|
FieldMin:
|
||
|
|
var req = self as FieldMin
|
||
|
|
var value = grid.get_field_value_at(req.field, pos)
|
||
|
|
var min = req.min
|
||
|
|
return value >= min
|
||
|
|
FieldMax:
|
||
|
|
var req = self as FieldMax
|
||
|
|
var value = grid.get_field_value_at(req.field, pos)
|
||
|
|
var max = req.max
|
||
|
|
return value <= max
|
||
|
|
FieldRange:
|
||
|
|
var req = self as FieldMax
|
||
|
|
var value = grid.get_field_value_at(req.field, pos)
|
||
|
|
var min = req.min
|
||
|
|
var max = req.max
|
||
|
|
return min <= value <= max
|
||
|
|
FieldComparison:
|
||
|
|
var req = self as FieldComparison
|
||
|
|
var left = grid.get_field_value_at(req.field_left, pos)
|
||
|
|
var right = grid.get_field_value_at(req.field_right, pos)
|
||
|
|
match req.operation:
|
||
|
|
FieldComparison.Operation.LessThan: left < right
|
||
|
|
FieldComparison.Operation.GreaterThan: left > right
|
||
|
|
assert(false, "Unknown Field Requirement!")
|
||
|
|
return false
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#var current_field_value = grid.get_field_value_at(requirement.field, tile_pos)
|
||
|
|
#if requirement.enforce_min && current_field_value < requirement.minimum: return false
|
||
|
|
#if requirement.enforce_max && current_field_value > requirement.maximum: return false
|
||
|
|
|
||
|
|
return true
|