Skip to content

Commit

Permalink
Less aggressive brush stroke optimizer
Browse files Browse the repository at this point in the history
  • Loading branch information
mbrlabs committed Sep 29, 2024
1 parent 01f49fb commit 172e11a
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 20 deletions.
23 changes: 5 additions & 18 deletions lorien/BrushStroke/BrushStrokeOptimizer.gd
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
class_name BrushStrokeOptimizer

# NOTE: this implementation is currently too aggressive and has a negative effect on user experience.
# Until it is visually undetectable by the user that the strokes were optimized, this will stay disabled.

# -------------------------------------------------------------------------------------------------
const ENABLED := false
const ANGLE_THRESHOLD := 0.5
const DISTANCE_THRESHOLD := 1.0
const MIN_DISTANCE := 8.0

# -------------------------------------------------------------------------------------------------
var points_removed := 0
Expand All @@ -17,40 +13,31 @@ func reset() -> void:

# -------------------------------------------------------------------------------------------------
func optimize(s: BrushStroke) -> void:
if !ENABLED:
return

if s.points.size() < 8:
return

var max_angle_diff := ANGLE_THRESHOLD
var max_distance := DISTANCE_THRESHOLD


var filtered_points: Array[Vector2]
var filtered_pressures: Array[float]

filtered_points.append(s.points.front())
filtered_pressures.append(s.pressures.front())

var previous_angle := 0.0

for i: int in range(1, s.points.size()):
var prev_point := s.points[i-1]
var point := s.points[i]
var pressure := s.pressures[i]

# Distance between 2 points must be greater than x
var distance := prev_point.distance_to(point)
var distance_cond := distance > max_distance # TODO: make dependent on zoom level


# Angle between points must be beigger than x deg
var angle := rad_to_deg(prev_point.angle_to_point(point))
var angle_diff: float = abs(abs(angle) - abs(previous_angle))
var angle_cond := angle_diff >= max_angle_diff
previous_angle = angle

var point_too_far_away := distance > 100

if point_too_far_away || (distance_cond && angle_cond):
if distance > MIN_DISTANCE || angle_diff >= ANGLE_THRESHOLD:
filtered_points.append(point)
filtered_pressures.append(pressure)
else:
Expand Down
3 changes: 2 additions & 1 deletion lorien/Main.gd
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,8 @@ func _exit_tree() -> void:
# -------------------------------------------------------------------------------------------------
func _process(delta: float) -> void:
# Lower fps if user is idle
if !_canvas.is_drawing() && (Time.get_ticks_msec() - _last_input_time) > Config.BACKGROUND_IDLE_TIME_THRESHOLD:
var idle := (Time.get_ticks_msec() - _last_input_time) > Config.BACKGROUND_IDLE_TIME_THRESHOLD
if !_player_enabled && !_canvas.is_drawing() && idle:
Engine.max_fps = Settings.get_value(Settings.RENDERING_BACKGROUND_FPS, Config.DEFAULT_BACKGROUND_FPS)

# Upate statusbar
Expand Down
2 changes: 1 addition & 1 deletion lorien/UI/Toolbar.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ action_mode = 0
text = "#ffffff"

[node name="BrushSizeSlider" type="HSlider" parent="Console/Left"]
custom_minimum_size = Vector2(200, 20)
custom_minimum_size = Vector2(180, 20)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
Expand Down

0 comments on commit 172e11a

Please sign in to comment.