using Godot; namespace FOU.Scripts.Elements; public abstract class Liquid : Element { protected Liquid(int x, int y, ref Level level) : base(x, y, ref level) { } protected override Vector2I Check(Element source, Vector2I maxDirection) { if (GD.Randi() % 2 != 0) maxDirection.X *= -1; Vector2I freePos = Vector2I.Zero; for (int y = 0; y <= maxDirection.Y; y++) { // height if (source.Position.Y + y >= _level.SizeY) return freePos; // bounds check if (_level.Get(source.Position.X, source.Position.Y + y).GetType() == typeof(Element)) { freePos = new Vector2I(source.Position.X, source.Position.Y + y); } for (int x = -maxDirection.X; x <= maxDirection.X; x++) { // width if (freePos != Vector2I.Zero) break; if (source.Position.X + x >= _level.SizeX || source.Position.X + x < 0) return freePos; // bounds check if (_level.Get(source.Position.X + x, source.Position.Y + y).GetType() == typeof(Element)) { freePos = new Vector2I(source.Position.X + x, source.Position.Y + y); break; } } } return freePos; } }