Skip to content

Commit fd02aec

Browse files
committed
//brush deform: Use SimpleTransform in everything using WorldEditExpressionEnvironment
1 parent 354ac07 commit fd02aec

File tree

2 files changed

+28
-32
lines changed

2 files changed

+28
-32
lines changed

worldedit-core/src/main/java/com/sk89q/worldedit/function/factory/Deform.java

+4-32
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,8 @@
3232
import com.sk89q.worldedit.function.operation.RunContext;
3333
import com.sk89q.worldedit.internal.expression.Expression;
3434
import com.sk89q.worldedit.internal.expression.ExpressionException;
35+
import com.sk89q.worldedit.internal.util.TransformUtil;
3536
import com.sk89q.worldedit.math.Vector3;
36-
import com.sk89q.worldedit.math.transform.Identity;
37-
import com.sk89q.worldedit.math.transform.SimpleTransform;
3837
import com.sk89q.worldedit.math.transform.Transform;
3938
import com.sk89q.worldedit.regions.NullRegion;
4039
import com.sk89q.worldedit.regions.Region;
@@ -123,37 +122,10 @@ public String toString() {
123122
public Operation createFromContext(final EditContext context) {
124123

125124
Region region = firstNonNull(context.getRegion(), this.region);
125+
final Vector3 min = region.getMinimumPoint().toVector3();
126+
final Vector3 max = region.getMaximumPoint().toVector3();
126127

127-
final Transform transform;
128-
switch (mode) {
129-
case UNIT_CUBE:
130-
final Vector3 min = region.getMinimumPoint().toVector3();
131-
final Vector3 max = region.getMaximumPoint().toVector3();
132-
final Vector3 zero = max.add(min).multiply(0.5);
133-
Vector3 unit = max.subtract(zero);
134-
135-
if (unit.x() == 0) {
136-
unit = unit.withX(1.0);
137-
}
138-
if (unit.y() == 0) {
139-
unit = unit.withY(1.0);
140-
}
141-
if (unit.z() == 0) {
142-
unit = unit.withZ(1.0);
143-
}
144-
145-
transform = new SimpleTransform(zero, unit);
146-
break;
147-
148-
case RAW_COORD:
149-
transform = new Identity();
150-
break;
151-
152-
case OFFSET:
153-
default:
154-
transform = new SimpleTransform(offset, Vector3.ONE);
155-
break;
156-
}
128+
final Transform transform = TransformUtil.createTransformForExpressionCommand(mode, min, max, offset);
157129
LocalSession session = context.getSession();
158130
return new DeformOperation(context.getDestination(), region, transform, expression,
159131
session == null ? WorldEdit.getInstance().getConfiguration().calculationTimeout : session.getTimeout());

worldedit-core/src/main/java/com/sk89q/worldedit/internal/util/TransformUtil.java

+24
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.sk89q.worldedit.IncompleteRegionException;
2323
import com.sk89q.worldedit.LocalSession;
2424
import com.sk89q.worldedit.extension.platform.Actor;
25+
import com.sk89q.worldedit.function.factory.Deform;
2526
import com.sk89q.worldedit.math.Vector3;
2627
import com.sk89q.worldedit.math.transform.Identity;
2728
import com.sk89q.worldedit.math.transform.SimpleTransform;
@@ -94,4 +95,27 @@ public static Transform createTransformForExpressionCommand(boolean useRawCoords
9495
}
9596
return new SimpleTransform(center, scale);
9697
}
98+
99+
/**
100+
* Creates a {@link Transform} for the //deform command with clipboard support.
101+
*
102+
* @param mode The coordinate mode to use
103+
* @param min Minimum of the selection/clipboard
104+
* @param max Maximum of the selection/clipboard
105+
* @param placement Placement position
106+
* @return A transform from the expression coordinate system to the world/clipboard coordinate system
107+
*/
108+
public static Transform createTransformForExpressionCommand(Deform.Mode mode, Vector3 min, Vector3 max, Vector3 placement) {
109+
switch (mode) {
110+
case UNIT_CUBE:
111+
return createTransformForExpressionCommand(false, false, false, min, max, placement);
112+
113+
case RAW_COORD:
114+
return createTransformForExpressionCommand(true, false, false, min, max, placement);
115+
116+
case OFFSET:
117+
default:
118+
return createTransformForExpressionCommand(false, true, false, min, max, placement);
119+
}
120+
}
97121
}

0 commit comments

Comments
 (0)