camera controls

This commit is contained in:
zoe 2022-03-25 15:42:43 +01:00
parent 0ac3e2c423
commit b8fde19af1
16 changed files with 286 additions and 32 deletions

View file

@ -0,0 +1,3 @@
source_md5="8eadeb8bbf891f004e43352cc2e67542"
dest_md5="e4bcb9a55f2a4b582724442e7c362891"

BIN
Build/codename-routes.x86_64 Executable file

Binary file not shown.

View file

@ -1,8 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://Map/TileHandler.gd" type="Script" id=1]
[node name="Map" type="Node2D"]
[node name="TileHandler" type="Node2D" parent="."]
script = ExtResource( 1 )

View file

@ -1,15 +0,0 @@
extends Node2D
export var map_size = Vector2(24, 24)
var tiles = []
func _ready() -> void:
spawn()
func spawn():
var Tile = preload("res://Map/Tile.tscn")
for x in range(0, map_size.x - 1):
for y in range (0, map_size.y - 1):
var tile = Tile.instance()
tile.set_tile_id(Vector2(x,y))
tiles.append(tile)
add_child(tile)

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/purple.png-32855686abb92c88335339d26d1584c7.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Resources/Graphics/Tiles/purple.png"
dest_files=[ "res://.import/purple.png-32855686abb92c88335339d26d1584c7.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

13
World/Map.tscn Normal file
View file

@ -0,0 +1,13 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://World/TileHandler.gd" type="Script" id=1]
[ext_resource path="res://World/Tools/Camera/Camera.tscn" type="PackedScene" id=2]
[node name="Map" type="Node2D"]
[node name="Grid" type="Node2D" parent="."]
script = ExtResource( 1 )
[node name="CameraController" parent="." instance=ExtResource( 2 )]
[connection signal="size_updated" from="Grid" to="CameraController" method="_on_Grid_size_updated"]

20
World/TileHandler.gd Normal file
View file

@ -0,0 +1,20 @@
extends Node2D
export var map_size = Vector2(32, 32)
var tiles = []
signal size_updated(tiles)
func _ready() -> void:
spawn()
func spawn():
var Tile = preload("res://World/Tiles/Tile.tscn")
for x in range(0, map_size.x):
for y in range (0, map_size.y):
var tile = Tile.instance()
tile.set_tile_id(Vector2(x,y))
tiles.append(tile)
add_child(tile)
update_size()
func update_size():
emit_signal("size_updated", tiles)

View file

@ -1,5 +1,5 @@
extends Area2D extends Area2D
enum outline_colors{RED, BLUE, GREEN, YELLOW} enum outline_colors{PURPLE, RED, BLUE, GREEN, YELLOW}
var tile_id = Vector2(0,0) var tile_id = Vector2(0,0)
func change_color_to(color): func change_color_to(color):
@ -15,13 +15,8 @@ func change_color_to(color):
func set_tile_id(id: Vector2): func set_tile_id(id: Vector2):
tile_id = id tile_id = id
change_color_to(determine_color(id))
set_position(id) set_position(id)
func determine_color(id: Vector2) -> int:
var rng = RandomNumberGenerator.new()
rng.randomize()
return rng.randi_range(1, outline_colors.size() - 1)
func set_position(id: Vector2): func set_position(id: Vector2):
position.x = id.x * 32 position.x = id.x * 32

View file

@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=2] [gd_scene load_steps=3 format=2]
[ext_resource path="res://Resources/Graphics/Tiles/yellow.png" type="Texture" id=1] [ext_resource path="res://Resources/Graphics/Tiles/purple.png" type="Texture" id=1]
[ext_resource path="res://Map/Tile.gd" type="Script" id=2] [ext_resource path="res://World/Tiles/Tile.gd" type="Script" id=2]
[node name="Tile" type="Area2D"] [node name="Tile" type="Area2D"]
script = ExtResource( 2 ) script = ExtResource( 2 )

View file

@ -0,0 +1,49 @@
extends Camera2D
export var zoom_strength = 0.6
export var zoom_limit_upper = 2
export var zoom_limit_lower = 0.05
func _process(delta: float) -> void:
# position
var left = Input.get_action_strength("move_camera_left")
var right = Input.get_action_strength("move_camera_right")
var x_direction = right - left
var up = Input.get_action_strength("move_camera_up")
var down = Input.get_action_strength("move_camera_down")
var y_direction = down - up
var direction = Vector2(x_direction, y_direction)
global_position += direction.normalized() * zoom.x * 3
#mouse drag
if Input.is_action_pressed("camera_drag"):
var distance = clamp(global_position.distance_to(get_global_mouse_position()) / 24, 0, 10)
global_position.x += global_position.direction_to(get_global_mouse_position()).x * distance
global_position.y += global_position.direction_to(get_global_mouse_position()).y * distance
# if camera goes out of bounds, then reset it
if global_position.x -182 * zoom.x <= limit_left:
global_position.x = limit_left + 183 * zoom.x
elif global_position.x +182 * zoom.x >= limit_right:
global_position.x = limit_right - 183 * zoom.x
if global_position.y -64 * zoom.x <= limit_top:
global_position.y = limit_top + 65 * zoom.x
elif global_position.y +64 * zoom.x >= limit_bottom:
global_position.y = limit_bottom -65 * zoom.x
# zoom
var zoom_direction = 0
if Input.is_action_just_released("camera_zoom_in") or Input.is_action_pressed("camera_zoom_in"):
zoom_direction = zoom_strength * -1
elif Input.is_action_just_released("camera_zoom_out") or Input.is_action_pressed("camera_zoom_out"):
zoom_direction = zoom_strength
if zoom_limit_lower <= (zoom.x + zoom_direction) && (zoom.x + zoom_direction) <= zoom_limit_upper:
zoom.x = lerp(zoom.x, zoom.x + zoom_direction, 0.1)
zoom.y = lerp(zoom.y, zoom.y + zoom_direction, 0.1)
func _on_Grid_size_updated(tiles: Array) -> void:
limit_left = tiles.front().global_position.x - 64
limit_top = tiles.front().global_position.y - 64
limit_bottom = tiles.back().global_position.y + 64
limit_right = tiles.back().global_position.x + 64
position.x = limit_right / 2
position.y = limit_bottom / 2

View file

@ -0,0 +1,20 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://World/Tools/Camera/Camera.gd" type="Script" id=1]
[ext_resource path="res://icon.png" type="Texture" id=3]
[node name="Camera" type="Camera2D"]
current = true
limit_smoothed = true
smoothing_enabled = true
drag_margin_left = 0.8
drag_margin_top = 0.8
drag_margin_right = 0.8
drag_margin_bottom = 0.8
editor_draw_limits = true
script = ExtResource( 1 )
[node name="Icon" type="Sprite" parent="."]
visible = false
position = Vector2( 0, -3 )
texture = ExtResource( 3 )

View file

@ -0,0 +1,5 @@
extends Node2D
func _physics_process(delta: float) -> void:
global_position = get_global_mouse_position()

24
export_presets.cfg Normal file
View file

@ -0,0 +1,24 @@
[preset.0]
name="Linux/X11"
platform="Linux/X11"
runnable=true
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="Build/codename-routes.x86_64"
script_export_mode=1
script_encryption_key=""
[preset.0.options]
custom_template/debug=""
custom_template/release=""
binary_format/64_bits=true
binary_format/embed_pck=true
texture_format/bptc=false
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
texture_format/no_bptc_fallbacks=true

View file

@ -11,7 +11,7 @@ config_version=4
[application] [application]
config/name="codename-routes" config/name="codename-routes"
run/main_scene="res://Map/Map.tscn" run/main_scene="res://World/Map.tscn"
boot_splash/fullsize=false boot_splash/fullsize=false
config/icon="res://icon.png" config/icon="res://icon.png"
@ -23,10 +23,123 @@ window/size/test_height=1
window/stretch/mode="2d" window/stretch/mode="2d"
window/stretch/aspect="keep" window/stretch/aspect="keep"
[input]
ui_accept={
"deadzone": 0.5,
"events": [ ]
}
ui_select={
"deadzone": 0.5,
"events": [ ]
}
ui_cancel={
"deadzone": 0.5,
"events": [ ]
}
ui_focus_next={
"deadzone": 0.5,
"events": [ ]
}
ui_focus_prev={
"deadzone": 0.5,
"events": [ ]
}
ui_left={
"deadzone": 0.5,
"events": [ ]
}
ui_right={
"deadzone": 0.5,
"events": [ ]
}
ui_up={
"deadzone": 0.5,
"events": [ ]
}
ui_down={
"deadzone": 0.5,
"events": [ ]
}
ui_page_up={
"deadzone": 0.5,
"events": [ ]
}
ui_page_down={
"deadzone": 0.5,
"events": [ ]
}
ui_home={
"deadzone": 0.5,
"events": [ ]
}
ui_end={
"deadzone": 0.5,
"events": [ ]
}
move_camera_left={
"deadzone": 0.1,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":65,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null)
]
}
move_camera_right={
"deadzone": 0.1,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":68,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
]
}
move_camera_up={
"deadzone": 0.1,
"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":87,"unicode":0,"echo":false,"script":null)
]
}
move_camera_down={
"deadzone": 0.1,
"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":83,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
]
}
camera_zoom_in={
"deadzone": 0.1,
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":4,"pressed":false,"doubleclick":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":6,"axis_value":1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":false,"meta":false,"command":false,"pressed":false,"scancode":61,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":61,"unicode":0,"echo":false,"script":null)
]
}
camera_zoom_out={
"deadzone": 0.1,
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"pressed":false,"doubleclick":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":7,"axis_value":1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":45,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":45,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
]
}
camera_drag={
"deadzone": 0.1,
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null)
]
}
[layer_names]
2d_physics/layer_10="world_boundary"
[physics] [physics]
common/enable_pause_aware_picking=true common/enable_pause_aware_picking=true
[rendering] [rendering]
environment/default_clear_color=Color( 0.121569, 0.0627451, 0.164706, 1 )
environment/default_environment="res://default_env.tres" environment/default_environment="res://default_env.tres"
[world]
2d/cell_size=32