public override void UpdateEntities(float dt) { if (!base.Changed()) { return; } MovedMouseSinceStart = true; EditMovementDelta += MovementRawDelta * dt; EditRotationDelta += RotationDelta * dt; EditScaleDelta += ScaleDelta * dt; for (var i = 0; i < ControlledEntities.Count; i++) { var entity = ControlledEntities[i]; var startingTransform = StartingTransforms[i]; if (RotationDelta.Length() > Constants.Epsilon) { var rotation = startingTransform.Rotation.ToRotator().ToFloat4() + EditRotationDelta;//transform.Rotation.ToRotator().ToFloat4(); if (AngleAlignment > 0) { rotation -= RyneMath.Mod(rotation, new Float4(AngleAlignment)); } entity.Transform.Rotation = new Rotator(rotation).ToQuaternion(); if (SharedPivotRotationMode) { var vector = startingTransform.GetLocation() - SharedPivot; // Unrotate with starting rotation vector = startingTransform.Rotation.Inverse().RotateVector(vector); // Rotate to new rotation vector = entity.Transform.Rotation.RotateVector(vector); entity.Transform.SetLocation(SharedPivot + vector); } } if (MovementRawDelta.Length() > Constants.Epsilon) { var position = startingTransform.Position + EditMovementDelta; if (GridAlignment > 0) { position -= RyneMath.Mod(position, new Float4(GridAlignment)); } entity.Transform.Position = position; } if (ScaleDelta.Length() > Constants.Epsilon) { var scale = startingTransform.Scale + EditScaleDelta; if (ScaleAlignment > 0) { scale -= RyneMath.Mod(scale, new Float4(ScaleAlignment)); } entity.Transform.Scale = scale; } } OnEntitiesChanged?.Invoke(); }