--- @alias SpellTargetTest fun(caster: Character, targetPosition: Vec3) : boolean return { -- любой тайл any = function() return true end, -- тайл, где находится кастующий caster = function(caster, targetPosition) local targetCharacterId = Tree.level.characterGrid:get(targetPosition) return caster.id == targetCharacterId end, -- тайл, где находится любой персонаж character = function(caster, targetPosition) local targetCharacterId = Tree.level.characterGrid:get(targetPosition) return not not targetCharacterId end, -- тайл в пределах окружности в нашей кривой метрике --- @param radius number distance = function(radius) return function(caster, targetPosition) return caster:try(Tree.behaviors.positioned, function(p) local dist = math.max(math.abs(p.position.x - targetPosition.x), math.abs(p.position.y - targetPosition.y)) return dist <= radius end) end end }