Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion addons/carmel4a97.RTS_Camera2D/Plugin.gd
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ tool
extends EditorPlugin

func _enter_tree():
add_custom_type("RTS-Camera2D", "Camera2D", preload("RTS-Camera2D.gd"), preload("node_icon.png"))
add_custom_type("RTS-Camera2D", "Camera2D", preload("RTS-Camera2D.gd"), preload("node_icon.png"))

func _exit_tree():
remove_custom_type("RTS-Camera2D")
41 changes: 23 additions & 18 deletions addons/carmel4a97.RTS_Camera2D/RTS-Camera2D.gd
Original file line number Diff line number Diff line change
Expand Up @@ -25,32 +25,32 @@ extends Camera2D
# drag - by clicking mouse button, right mouse button by default;
# edge - by moving mouse to the window edge
# wheel - zoom in/out by mouse wheel
export (bool) var key = true
export (bool) var drag = true
export (bool) var edge = false
export (bool) var wheel = true
@export var key: bool = true
@export var drag: bool = true
@export var edge: bool = false
@export var wheel: bool = true

export (int) var zoom_out_limit = 100
@export var zoom_out_limit: int = 100

# Camera speed in px/s.
export (int) var camera_speed = 450
@export var camera_speed: int = 450

# Initial zoom value taken from Editor.
var camera_zoom = get_zoom()

# Value meaning how near to the window edge (in px) the mouse must be,
# to move a view.
export (int) var camera_margin = 50
@export var camera_margin: int = 50

# It changes a camera zoom value in units... (?, but it works... it probably
# multiplies camera size by 1+camera_zoom_speed)
const camera_zoom_speed = Vector2(0.5, 0.5)
const camera_zoom_speed: Vector2 = Vector2(0.5, 0.5)

# Vector of camera's movement / second.
var camera_movement = Vector2()
var camera_movement: Vector2 = Vector2()

# Previous mouse position used to count delta of the mouse movement.
var _prev_mouse_pos = null
var _prev_mouse_pos: Vector2 = Vector2.ZERO

# INPUTS

Expand All @@ -60,13 +60,12 @@ var __rmbk = false
var __keys = [false, false, false, false]

func _ready():
set_h_drag_enabled(false)
set_v_drag_enabled(false)
set_enable_follow_smoothing(true)
set_follow_smoothing(4)
set_drag_horizontal_enabled(false)
set_drag_vertical_enabled(false)
set_position_smoothing_enabled(true)
set_position_smoothing_speed(4)

func _physics_process(delta):

# Move camera by keys defined in InputMap (ui_left/top/right/bottom).
if key:
if __keys[0]:
Expand Down Expand Up @@ -97,6 +96,12 @@ func _physics_process(delta):

# Update position of the camera.
position += camera_movement * get_zoom()

# force camera to center of screen positionally
var center = get_screen_center_position()
var current_target = get_target_position()
if current_target != center:
position = center

# Set camera movement to zero, update old mouse position.
camera_movement = Vector2(0,0)
Expand All @@ -105,21 +110,21 @@ func _physics_process(delta):
func _unhandled_input( event ):
if event is InputEventMouseButton:
if drag and\
event.button_index == BUTTON_RIGHT:
event.button_index == MOUSE_BUTTON_RIGHT:
# Control by right mouse button.
if event.pressed: __rmbk = true
else: __rmbk = false
# Check if mouse wheel was used. Not handled by ImputMap!
if wheel:
# Checking if future zoom won't be under 0.
# In that cause engine will flip screen.
if event.button_index == BUTTON_WHEEL_UP and\
if event.button_index == MOUSE_BUTTON_WHEEL_UP and\
camera_zoom.x - camera_zoom_speed.x > 0 and\
camera_zoom.y - camera_zoom_speed.y > 0:
camera_zoom -= camera_zoom_speed
set_zoom(camera_zoom)
# Checking if future zoom won't be above zoom_out_limit.
if event.button_index == BUTTON_WHEEL_DOWN and\
if event.button_index == MOUSE_BUTTON_WHEEL_DOWN and\
camera_zoom.x + camera_zoom_speed.x < zoom_out_limit and\
camera_zoom.y + camera_zoom_speed.y < zoom_out_limit:
camera_zoom += camera_zoom_speed
Expand Down