Browse Source

Refactor gravity parsing

DarthSim 5 months ago
parent
commit
f7433303e6
1 changed files with 29 additions and 20 deletions
  1. 29 20
      options/processing_options.go

+ 29 - 20
options/processing_options.go

@@ -220,35 +220,44 @@ func isGravityOffcetValid(gravity GravityType, offset float64) bool {
 func parseGravity(g *GravityOptions, args []string, allowedTypes []GravityType) error {
 	nArgs := len(args)
 
-	if nArgs > 3 {
-		return fmt.Errorf("Invalid gravity arguments: %v", args)
-	}
-
 	if t, ok := gravityTypes[args[0]]; ok && slices.Contains(allowedTypes, t) {
 		g.Type = t
 	} else {
 		return fmt.Errorf("Invalid gravity: %s", args[0])
 	}
 
-	if g.Type == GravitySmart && nArgs > 1 {
-		return fmt.Errorf("Invalid gravity arguments: %v", args)
-	} else if g.Type == GravityFocusPoint && nArgs != 3 {
-		return fmt.Errorf("Invalid gravity arguments: %v", args)
-	}
+	switch g.Type {
+	case GravitySmart:
+		if nArgs > 1 {
+			return fmt.Errorf("Invalid gravity arguments: %v", args)
+		}
+		g.X, g.Y = 0.0, 0.0
 
-	if nArgs > 1 {
-		if x, err := strconv.ParseFloat(args[1], 64); err == nil && isGravityOffcetValid(g.Type, x) {
-			g.X = x
-		} else {
-			return fmt.Errorf("Invalid gravity X: %s", args[1])
+	case GravityFocusPoint:
+		if nArgs != 3 {
+			return fmt.Errorf("Invalid gravity arguments: %v", args)
 		}
-	}
+		fallthrough
 
-	if nArgs > 2 {
-		if y, err := strconv.ParseFloat(args[2], 64); err == nil && isGravityOffcetValid(g.Type, y) {
-			g.Y = y
-		} else {
-			return fmt.Errorf("Invalid gravity Y: %s", args[2])
+	default:
+		if nArgs > 3 {
+			return fmt.Errorf("Invalid gravity arguments: %v", args)
+		}
+
+		if nArgs > 1 {
+			if x, err := strconv.ParseFloat(args[1], 64); err == nil && isGravityOffcetValid(g.Type, x) {
+				g.X = x
+			} else {
+				return fmt.Errorf("Invalid gravity X: %s", args[1])
+			}
+		}
+
+		if nArgs > 2 {
+			if y, err := strconv.ParseFloat(args[2], 64); err == nil && isGravityOffcetValid(g.Type, y) {
+				g.Y = y
+			} else {
+				return fmt.Errorf("Invalid gravity Y: %s", args[2])
+			}
 		}
 	}