SemiMetalAlchemist icon

FC Camera Updated

SemiMetalAlchemist | PRO | 05/24/18 05:10:12 PM UTC | 0 ⭐ | 227 👁️ | Never ⏰ | []
Game Maker |

0 B

|

None

|

0 👍

/

0 👎

///obj_camera
///CREATE EVENT
enum cammode {
    follow_object = 0,                                      ///Can set these equal to a number, or string like "hello"
    follow_mouse_drag = 1,                                  ///Without designation, assumes 1,2,3...
    follow_mouse_border = "hello:,
    follow_mouse_peek,
    move_to_target,
    move_to_follow_object,
}
 
cammode.follow_mouse_border                         ///or .string as called in enum.  Will come up in autocomplete
 
mode = 0;                                           /// = 0 is default for follow_object
following = obj_player;
boundless = false;                                                              ///boundaries for camera movement
 
view_w = camera_get_view_width(view_camera[0]);
view_h = camera_get_view_height(view_camera[0]);
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 
///STEP EVENT
cx = camera_get_view_x(view_camera[0]);
cy = camera_get_view_y(view_camera[0]);
 
switch(mode){
    case cammode.follow_object:                     ///colon, not semicolon
        if(!instance_exists(following)) break;      ///Follow Object Finished
        cx = following.x - (view_w/2);
        cy = following.y - (view_h/2);
    break;
    
    case cammode.follow_mouse_drag:
    break;
 
 
    case cammode.follow_mouse_border:
          if(!point_in_rectangle(mouse_x, mouse_y, cx+(view_w*0.1), cy+(view_h*0.1), cx+(view_w*0.9), cy+(view_h*0.9))){         ///need a command to clamp to room boundaries
            cx = lerp(cx, mouse_x-(view_w/2), 0.05);
            cy = lerp(cy, mouse_y-(view_h/2), 0.05);
          }
        break;
        
 
    case    cammode.follow_mouse_peek:              ///SUPERIMPORTANT
          cx = lerp(following.x, mouse_x, 0.2)-(view_w/2);
          cy = lerp(following.y, mouse_y, 0.2)-(view_h/2);
    break;
        
 
    case cammode.move_to_target:
    break;
 
 
    case cammode.move_to_follow_object:
        break;
}
 
if(!boundless){
  cx = clamp(cx, 0, room_width-view_w);
  cy = clamp(cy, 0, room_heigt-view_h);
}
 
 
camera_set_view_pos(view_camera[0], cx, cy);

Comments