Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
0.8.3:interaction [2022/04/20 15:42] – [Classic Camera Mouse Movement] admin0.8.3:interaction [2022/04/20 15:45] (current) – [Classic Camera Mouse Movement] admin
Line 102: Line 102:
  
 <file pascal> <file pascal>
 +var FMove : Boolean;
 +    FLastPos : TPointF;
 +    FSpeed : Single = 0.1;
 +
 procedure TGameWin.GorillaViewport1MouseDown(Sender: TObject; procedure TGameWin.GorillaViewport1MouseDown(Sender: TObject;
   Button: TMouseButton; Shift: TShiftState; X, Y: Single);   Button: TMouseButton; Shift: TShiftState; X, Y: Single);
 begin begin
 +  /// allow camera movement
   FMove := true;   FMove := true;
 +  /// store the current mouse position to detect the pixel movement
   FLastPos := PointF(X, Y);   FLastPos := PointF(X, Y);
 end; end;
Line 114: Line 120:
     LDir  : TPoint3D;     LDir  : TPoint3D;
 begin begin
 +  /// if mouse was not down - skip camera movement here
   if not FMove then   if not FMove then
   begin   begin
Line 120: Line 127:
   end;   end;
  
 +  /// compute the offset to the last pixel position
   LDiff := PointF(X, Y) - FLastPos;   LDiff := PointF(X, Y) - FLastPos;
  
   if ssRight in Shift then   if ssRight in Shift then
   begin   begin
-    // rotate camera+    /// rotate camera on right mouse button down
     Dummy1.RotationAngle.Y := Dummy1.RotationAngle.Y + LDiff.X;     Dummy1.RotationAngle.Y := Dummy1.RotationAngle.Y + LDiff.X;
   end   end
-  else+  else if ssLeft in Shift then
   begin   begin
-    // move camera in camera direction+    /// move camera in view direction if left mouse button is down
     LDir := TPoint3D.Zero;     LDir := TPoint3D.Zero;
  
-    LDir := LDir + TPoint3D(GorillaCamera1.AbsoluteLeft) * (LDiff.X * 0.1); +    /// at first we apply the left-side direction  
-    LDir := LDir + TPoint3D(GorillaCamera1.AbsoluteDirection) * (LDiff.Y * 0.1);+    LDir := LDir + TPoint3D(GorillaCamera1.AbsoluteLeft) * (LDiff.X * FSpeed); 
 +    /// then we apply the forward direction 
 +    LDir := LDir + TPoint3D(GorillaCamera1.AbsoluteDirection) * (LDiff.Y * FSpeed);
  
-    // we move the parent dummy, not the camera itself!+    /// we move the parent dummy, not the camera itself! 
 +    /// simply by adding our direction vector to the current dummy position
     Dummy1.Position.Point := Dummy1.Position.Point + LDir;     Dummy1.Position.Point := Dummy1.Position.Point + LDir;
   end;   end;