Removing superfluous code, updating camera a bit
This commit is contained in:
parent
cec9227b67
commit
fc896925d6
7 changed files with 157 additions and 119 deletions
|
|
@ -1,11 +1,10 @@
|
||||||
[gd_scene load_steps=2 format=3 uid="uid://rnfx7djn5qik"]
|
[gd_scene load_steps=3 format=3 uid="uid://htaqjgupmiiu"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://components/scripts/free_camera_component.gd" id="1_isqof"]
|
[ext_resource type="Script" path="res://components/scripts/free_camera_component.gd" id="1_isqof"]
|
||||||
|
[ext_resource type="Script" path="res://components/scripts/free_camera_game_camera_component.gd" id="2_g4lf4"]
|
||||||
|
|
||||||
[node name="FreeCameraComponent" type="Node2D"]
|
[node name="FreeCameraComponent" type="Node2D"]
|
||||||
|
script = ExtResource("1_isqof")
|
||||||
|
|
||||||
[node name="GameCamera" type="Camera2D" parent="."]
|
[node name="GameCamera" type="Camera2D" parent="."]
|
||||||
script = ExtResource("1_isqof")
|
script = ExtResource("2_g4lf4")
|
||||||
zoom_out_limit = 10
|
|
||||||
camera_speed = 400
|
|
||||||
camera_margin = 10
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ func _ready() -> void:
|
||||||
Log.pr("CrystalGlowComponent ready")
|
Log.pr("CrystalGlowComponent ready")
|
||||||
|
|
||||||
tile_size = tile_map.get_tileset().tile_size
|
tile_size = tile_map.get_tileset().tile_size
|
||||||
map_pixel_size = tilemap_size * tile_size
|
|
||||||
tilemap_size = tile_map.get_used_rect().end - tile_map.get_used_rect().position
|
tilemap_size = tile_map.get_used_rect().end - tile_map.get_used_rect().position
|
||||||
|
|
||||||
crystal_layer = tile_map.get_layer_id_by_name('Crystals')
|
crystal_layer = tile_map.get_layer_id_by_name('Crystals')
|
||||||
|
|
@ -42,7 +41,7 @@ func add_crystal_glow() -> void:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
var glow : CrystalGlow = crystal_glow.instantiate().duplicate()
|
var glow : CrystalGlow = crystal_glow.instantiate().duplicate()
|
||||||
glow.set_position(coords * tile_map.get_tileset().tile_size + tile_map.get_tileset().tile_size / 2)
|
glow.set_position(coords * tile_size + tile_size / 2)
|
||||||
glow.glow_colour = glow_colour
|
glow.glow_colour = glow_colour
|
||||||
glow.orientation = orientation
|
glow.orientation = orientation
|
||||||
crystal_glow_container.add_child(glow)
|
crystal_glow_container.add_child(glow)
|
||||||
|
|
|
||||||
|
|
@ -1,106 +1,31 @@
|
||||||
extends Camera2D
|
extends Node2D
|
||||||
|
class_name FreeCameraComponent
|
||||||
|
|
||||||
@export var key : bool = true
|
@onready var camera : GameCamera = $GameCamera
|
||||||
@export var drag : bool = true
|
@export var tile_map : TileMap = null
|
||||||
@export var edge : bool = false
|
|
||||||
@export var wheel : bool = true
|
|
||||||
|
|
||||||
@export var zoom_in_limit : float = 2.5 # The max vector2 zoom value
|
|
||||||
|
|
||||||
@export var camera_speed : int = 450 # Camera speed in px/s
|
|
||||||
@export var camera_margin : int = 50 # Pixels around edge of screen where the mouse will start moving the camera
|
|
||||||
|
|
||||||
# Initial zoom value taken from Editor.
|
|
||||||
var camera_zoom : Vector2 = zoom
|
|
||||||
|
|
||||||
const camera_zoom_speed = Vector2(0.5, 0.5)
|
|
||||||
var camera_movement : Vector2 = Vector2.ZERO
|
|
||||||
var _prev_mouse_pos : Vector2 = Vector2.ZERO
|
|
||||||
|
|
||||||
# INPUTS
|
|
||||||
|
|
||||||
# Right mouse button was or is pressed.
|
|
||||||
var __rmbk : bool = false
|
|
||||||
# Move camera by keys: left, top, right, bottom.
|
|
||||||
var __keys : Array[bool] = [false, false, false, false]
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
set_drag_horizontal_enabled(false)
|
|
||||||
set_drag_vertical_enabled(false)
|
|
||||||
set_position_smoothing_enabled(true)
|
|
||||||
set_position_smoothing_speed(4)
|
|
||||||
|
|
||||||
func _physics_process(delta : float) -> void:
|
if !tile_map:
|
||||||
|
Log.err("FreeCameraComponent: tile_map is not set")
|
||||||
# Move camera by keys defined in InputMap (ui_left/top/right/bottom).
|
|
||||||
if key:
|
|
||||||
if __keys[0]:
|
|
||||||
camera_movement.x -= camera_speed * delta
|
|
||||||
if __keys[1]:
|
|
||||||
camera_movement.y -= camera_speed * delta
|
|
||||||
if __keys[2]:
|
|
||||||
camera_movement.x += camera_speed * delta
|
|
||||||
if __keys[3]:
|
|
||||||
camera_movement.y += camera_speed * delta
|
|
||||||
|
|
||||||
# Move camera by mouse, when it's on the margin (defined by camera_margin).
|
|
||||||
if edge:
|
|
||||||
var rec : Rect2 = get_viewport().get_visible_rect()
|
|
||||||
var v : Vector2 = get_local_mouse_position() + rec.size/2
|
|
||||||
if rec.size.x - v.x <= camera_margin:
|
|
||||||
camera_movement.x += camera_speed * delta
|
|
||||||
if v.x <= camera_margin:
|
|
||||||
camera_movement.x -= camera_speed * delta
|
|
||||||
if rec.size.y - v.y <= camera_margin:
|
|
||||||
camera_movement.y += camera_speed * delta
|
|
||||||
if v.y <= camera_margin:
|
|
||||||
camera_movement.y -= camera_speed * delta
|
|
||||||
|
|
||||||
# When RMB is pressed, move camera by difference of mouse position
|
|
||||||
if drag and __rmbk:
|
|
||||||
camera_movement = _prev_mouse_pos - get_local_mouse_position()
|
|
||||||
|
|
||||||
# Update position of the camera.
|
|
||||||
position += camera_movement * get_zoom()
|
|
||||||
|
|
||||||
# Set camera movement to zero, update old mouse position.
|
|
||||||
camera_movement = Vector2(0,0)
|
|
||||||
_prev_mouse_pos = get_local_mouse_position()
|
|
||||||
|
|
||||||
func _unhandled_input( event : InputEvent) ->void:
|
## Set the limits for the camera based on the tilemap
|
||||||
if event is InputEventMouseButton:
|
#camera.set_limits(0, tile_map.)
|
||||||
var mouse_event : InputEventMouseButton = event as InputEventMouseButton
|
|
||||||
if drag and\
|
# Stop the camera scrolling out of bounds of the map
|
||||||
mouse_event.button_index == MOUSE_BUTTON_RIGHT:
|
var tile_size : Vector2i = tile_map.get_tileset().tile_size
|
||||||
# Control by right mouse button.
|
var tilemap_size : Vector2i = tile_map.get_used_rect().end - tile_map.get_used_rect().position
|
||||||
if mouse_event.pressed: __rmbk = true
|
var map_size_x : int = tile_size.x * tilemap_size.x
|
||||||
else: __rmbk = false
|
var map_size_y : int = tile_size.y * tilemap_size.y
|
||||||
# Check if mouse wheel was used. Not handled by InputMap!
|
|
||||||
if wheel:
|
Log.pr("Size Y", map_size_y, get_viewport().size.y)
|
||||||
if mouse_event.button_index == MOUSE_BUTTON_WHEEL_DOWN and\
|
Log.pr("Size X", map_size_x, get_viewport().size.x)
|
||||||
camera_zoom.x - camera_zoom_speed.x > 0 and\
|
|
||||||
camera_zoom.y - camera_zoom_speed.y > 0:
|
#Log.pr(map_size - get_viewport().size.x)
|
||||||
camera_zoom -= camera_zoom_speed
|
|
||||||
set_zoom(camera_zoom)
|
camera.set_limit(SIDE_LEFT, 0)
|
||||||
if mouse_event.button_index == MOUSE_BUTTON_WHEEL_UP and\
|
camera.set_limit(SIDE_TOP, 0)
|
||||||
camera_zoom.x + camera_zoom_speed.x < zoom_in_limit and\
|
camera.set_limit(SIDE_RIGHT, map_size_x)
|
||||||
camera_zoom.y + camera_zoom_speed.y < zoom_in_limit:
|
camera.set_limit(SIDE_BOTTOM, map_size_y)
|
||||||
camera_zoom += camera_zoom_speed
|
|
||||||
set_zoom(camera_zoom)
|
pass
|
||||||
# Control by keyboard handled by InpuMap.
|
|
||||||
if event.is_action_pressed("ui_left"):
|
|
||||||
__keys[0] = true
|
|
||||||
if event.is_action_pressed("ui_up"):
|
|
||||||
__keys[1] = true
|
|
||||||
if event.is_action_pressed("ui_right"):
|
|
||||||
__keys[2] = true
|
|
||||||
if event.is_action_pressed("ui_down"):
|
|
||||||
__keys[3] = true
|
|
||||||
if event.is_action_released("ui_left"):
|
|
||||||
__keys[0] = false
|
|
||||||
if event.is_action_released("ui_up"):
|
|
||||||
__keys[1] = false
|
|
||||||
if event.is_action_released("ui_right"):
|
|
||||||
__keys[2] = false
|
|
||||||
if event.is_action_released("ui_down"):
|
|
||||||
__keys[3] = false
|
|
||||||
|
|
|
||||||
119
components/scripts/free_camera_game_camera_component.gd
Normal file
119
components/scripts/free_camera_game_camera_component.gd
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
extends Camera2D
|
||||||
|
class_name GameCamera
|
||||||
|
|
||||||
|
@export var key : bool = true
|
||||||
|
@export var drag : bool = true
|
||||||
|
@export var edge : bool = false
|
||||||
|
@export var wheel : bool = true
|
||||||
|
|
||||||
|
@export var zoom_in_limit : float = 2.5 # The max vector2 zoom value
|
||||||
|
|
||||||
|
@export var camera_speed : int = 450 # Camera speed in px/s
|
||||||
|
@export var camera_margin : int = 50 # Pixels around edge of screen where the mouse will start moving the camera
|
||||||
|
|
||||||
|
# Initial zoom value taken from Editor.
|
||||||
|
var camera_zoom : Vector2 = zoom
|
||||||
|
|
||||||
|
const camera_zoom_speed = Vector2(0.5, 0.5)
|
||||||
|
var camera_movement : Vector2 = Vector2.ZERO
|
||||||
|
var _prev_mouse_pos : Vector2 = Vector2.ZERO
|
||||||
|
|
||||||
|
# INPUTS
|
||||||
|
|
||||||
|
# Right mouse button was or is pressed.
|
||||||
|
var __rmbk : bool = false
|
||||||
|
# Move camera by keys: left, top, right, bottom.
|
||||||
|
var __keys : Array[bool] = [false, false, false, false]
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
set_drag_horizontal_enabled(false)
|
||||||
|
set_drag_vertical_enabled(false)
|
||||||
|
set_position_smoothing_enabled(true)
|
||||||
|
set_position_smoothing_speed(4)
|
||||||
|
|
||||||
|
func _physics_process(delta : float) -> void:
|
||||||
|
|
||||||
|
# Move camera by keys defined in InputMap (ui_left/top/right/bottom).
|
||||||
|
if key:
|
||||||
|
if __keys[0]:
|
||||||
|
camera_movement.x -= camera_speed * delta
|
||||||
|
if __keys[1]:
|
||||||
|
camera_movement.y -= camera_speed * delta
|
||||||
|
if __keys[2]:
|
||||||
|
camera_movement.x += camera_speed * delta
|
||||||
|
if __keys[3]:
|
||||||
|
camera_movement.y += camera_speed * delta
|
||||||
|
|
||||||
|
# Move camera by mouse, when it's on the margin (defined by camera_margin).
|
||||||
|
if edge:
|
||||||
|
var rec : Rect2 = get_viewport().get_visible_rect()
|
||||||
|
var v : Vector2 = get_local_mouse_position() + rec.size/2
|
||||||
|
if rec.size.x - v.x <= camera_margin:
|
||||||
|
camera_movement.x += camera_speed * delta
|
||||||
|
if v.x <= camera_margin:
|
||||||
|
camera_movement.x -= camera_speed * delta
|
||||||
|
if rec.size.y - v.y <= camera_margin:
|
||||||
|
camera_movement.y += camera_speed * delta
|
||||||
|
if v.y <= camera_margin:
|
||||||
|
camera_movement.y -= camera_speed * delta
|
||||||
|
|
||||||
|
# When RMB is pressed, move camera by difference of mouse position
|
||||||
|
if drag and __rmbk:
|
||||||
|
camera_movement = _prev_mouse_pos - get_local_mouse_position()
|
||||||
|
|
||||||
|
# If this movement would take us out of clamp we don't want to do it:
|
||||||
|
var position_change : Vector2 = camera_movement * get_zoom()
|
||||||
|
|
||||||
|
if (position.x + position_change.x) <= limit_left or\
|
||||||
|
(position.x + position_change.x) >= limit_right:
|
||||||
|
camera_movement.x = 0
|
||||||
|
|
||||||
|
if (position.y + position_change.y) <= limit_top or\
|
||||||
|
(position.y + position_change.y) >= limit_bottom:
|
||||||
|
camera_movement.y = 0
|
||||||
|
|
||||||
|
if camera_movement.y != 0 or camera_movement.x != 0:
|
||||||
|
# Update position of the camera.
|
||||||
|
position += camera_movement * get_zoom()
|
||||||
|
|
||||||
|
# Set camera movement to zero, update old mouse position.
|
||||||
|
camera_movement = Vector2(0,0)
|
||||||
|
_prev_mouse_pos = get_local_mouse_position()
|
||||||
|
|
||||||
|
func _unhandled_input( event : InputEvent) ->void:
|
||||||
|
if event is InputEventMouseButton:
|
||||||
|
var mouse_event : InputEventMouseButton = event as InputEventMouseButton
|
||||||
|
if drag and\
|
||||||
|
mouse_event.button_index == MOUSE_BUTTON_RIGHT:
|
||||||
|
# Control by right mouse button.
|
||||||
|
if mouse_event.pressed: __rmbk = true
|
||||||
|
else: __rmbk = false
|
||||||
|
# Check if mouse wheel was used. Not handled by InputMap!
|
||||||
|
if wheel:
|
||||||
|
if mouse_event.button_index == MOUSE_BUTTON_WHEEL_DOWN 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)
|
||||||
|
if mouse_event.button_index == MOUSE_BUTTON_WHEEL_UP and\
|
||||||
|
camera_zoom.x + camera_zoom_speed.x < zoom_in_limit and\
|
||||||
|
camera_zoom.y + camera_zoom_speed.y < zoom_in_limit:
|
||||||
|
camera_zoom += camera_zoom_speed
|
||||||
|
set_zoom(camera_zoom)
|
||||||
|
# Control by keyboard handled by InpuMap.
|
||||||
|
if event.is_action_pressed("ui_left"):
|
||||||
|
__keys[0] = true
|
||||||
|
if event.is_action_pressed("ui_up"):
|
||||||
|
__keys[1] = true
|
||||||
|
if event.is_action_pressed("ui_right"):
|
||||||
|
__keys[2] = true
|
||||||
|
if event.is_action_pressed("ui_down"):
|
||||||
|
__keys[3] = true
|
||||||
|
if event.is_action_released("ui_left"):
|
||||||
|
__keys[0] = false
|
||||||
|
if event.is_action_released("ui_up"):
|
||||||
|
__keys[1] = false
|
||||||
|
if event.is_action_released("ui_right"):
|
||||||
|
__keys[2] = false
|
||||||
|
if event.is_action_released("ui_down"):
|
||||||
|
__keys[3] = false
|
||||||
|
|
@ -8,7 +8,6 @@ var mushroom_glow : PackedScene = preload("res://entities/mushroom_glow.tscn")
|
||||||
var glowing_mushrooms : Array = []
|
var glowing_mushrooms : Array = []
|
||||||
|
|
||||||
var tile_size : Vector2i
|
var tile_size : Vector2i
|
||||||
var map_pixel_size : Vector2i
|
|
||||||
var tilemap_size : Vector2i
|
var tilemap_size : Vector2i
|
||||||
var mushroom_layer : int = -1
|
var mushroom_layer : int = -1
|
||||||
|
|
||||||
|
|
@ -21,7 +20,6 @@ func _ready() -> void:
|
||||||
tile_map.tilemap_updated.connect(add_mushroom_glow)
|
tile_map.tilemap_updated.connect(add_mushroom_glow)
|
||||||
|
|
||||||
tile_size = tile_map.get_tileset().tile_size
|
tile_size = tile_map.get_tileset().tile_size
|
||||||
map_pixel_size = tilemap_size * tile_size
|
|
||||||
tilemap_size = tile_map.get_used_rect().end - tile_map.get_used_rect().position
|
tilemap_size = tile_map.get_used_rect().end - tile_map.get_used_rect().position
|
||||||
|
|
||||||
mushroom_layer = tile_map.get_layer_id_by_name('Mushrooms')
|
mushroom_layer = tile_map.get_layer_id_by_name('Mushrooms')
|
||||||
|
|
@ -48,7 +46,7 @@ func add_mushroom_glow() -> void:
|
||||||
if tile_data.get_custom_data('glowcolour'):
|
if tile_data.get_custom_data('glowcolour'):
|
||||||
var glow_colour : String = tile_data.get_custom_data('glowcolour')
|
var glow_colour : String = tile_data.get_custom_data('glowcolour')
|
||||||
var glow : MushroomGlow = mushroom_glow.instantiate()
|
var glow : MushroomGlow = mushroom_glow.instantiate()
|
||||||
glow.set_position(coords * tile_map.get_tileset().tile_size + tile_map.get_tileset().tile_size / 2)
|
glow.set_position(coords * tile_size + tile_size / 2)
|
||||||
glow.colour_name = glow_colour
|
glow.colour_name = glow_colour
|
||||||
mushroom_glow_container.add_child.call_deferred(glow)
|
mushroom_glow_container.add_child.call_deferred(glow)
|
||||||
glowing_mushrooms.append(coords)
|
glowing_mushrooms.append(coords)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ var water_fog : PackedScene = preload("res://entities/water_fog.tscn")
|
||||||
var effect_tiles : Array = []
|
var effect_tiles : Array = []
|
||||||
|
|
||||||
var tile_size : Vector2i
|
var tile_size : Vector2i
|
||||||
var map_pixel_size : Vector2i
|
|
||||||
var tilemap_size : Vector2i
|
var tilemap_size : Vector2i
|
||||||
var water_layer : int = -1
|
var water_layer : int = -1
|
||||||
|
|
||||||
|
|
@ -22,7 +21,6 @@ func _ready() -> void:
|
||||||
Log.pr("WaterEffectComponent ready")
|
Log.pr("WaterEffectComponent ready")
|
||||||
|
|
||||||
tile_size = tile_map.get_tileset().tile_size
|
tile_size = tile_map.get_tileset().tile_size
|
||||||
map_pixel_size = tilemap_size * tile_size
|
|
||||||
tilemap_size = tile_map.get_used_rect().end - tile_map.get_used_rect().position
|
tilemap_size = tile_map.get_used_rect().end - tile_map.get_used_rect().position
|
||||||
|
|
||||||
water_layer = tile_map.get_layer_id_by_name('Water')
|
water_layer = tile_map.get_layer_id_by_name('Water')
|
||||||
|
|
@ -48,15 +46,14 @@ func add_water_effects() -> void:
|
||||||
## 10% chance to add fog
|
## 10% chance to add fog
|
||||||
if randf() < 0.1:
|
if randf() < 0.1:
|
||||||
var fog : WaterFog = water_fog.instantiate()
|
var fog : WaterFog = water_fog.instantiate()
|
||||||
fog.set_position(coords * tile_map.get_tileset().tile_size + tile_map.get_tileset().tile_size / 2)
|
fog.set_position(coords * tile_size + tile_size / 2)
|
||||||
water_effect_container.add_child.call_deferred(fog)
|
water_effect_container.add_child.call_deferred(fog)
|
||||||
effect_tiles.append(coords)
|
effect_tiles.append(coords)
|
||||||
|
|
||||||
|
|
||||||
## 20% chance to add water particles
|
## 20% chance to add water particles
|
||||||
if randf() < 0.2:
|
if randf() < 0.2:
|
||||||
var water : WaterParticles = water_particles.instantiate()
|
var water : WaterParticles = water_particles.instantiate()
|
||||||
water.set_position(coords * tile_map.get_tileset().tile_size + tile_map.get_tileset().tile_size / 2)
|
water.set_position(coords * tile_size + tile_size / 2)
|
||||||
water_effect_container.add_child.call_deferred(water)
|
water_effect_container.add_child.call_deferred(water)
|
||||||
effect_tiles.append(coords)
|
effect_tiles.append(coords)
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue