Skip to content

Commit 01d2f78

Browse files
authored
Merge pull request #261 from GDquest/grid-based-movement-2d
Add 2d grid-based movement demo
2 parents 8cb1dcd + 954b6f4 commit 01d2f78

27 files changed

+778
-0
lines changed

2d/grid_based_movement/Game.tscn

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
[gd_scene load_steps=8 format=2]
2+
3+
[ext_resource path="res://tilesets/grid_lines/grid_lines_tileset.tres" type="TileSet" id=1]
4+
[ext_resource path="res://tilesets/grid/grid_tileset.tres" type="TileSet" id=2]
5+
[ext_resource path="res://grid/grid.gd" type="Script" id=3]
6+
[ext_resource path="res://pawns/Actor.tscn" type="PackedScene" id=4]
7+
[ext_resource path="res://pawns/pawn.gd" type="Script" id=5]
8+
[ext_resource path="res://pawns/sprites/character_grey.png" type="Texture" id=6]
9+
[ext_resource path="res://pawns/sprites/star.png" type="Texture" id=7]
10+
11+
[node name="Game" type="Node"]
12+
13+
[node name="GridLines" type="TileMap" parent="." index="0"]
14+
15+
modulate = Color( 1, 1, 1, 0.271059 )
16+
z_index = -1
17+
z_as_relative = false
18+
mode = 0
19+
tile_set = ExtResource( 1 )
20+
cell_size = Vector2( 64, 64 )
21+
cell_quadrant_size = 16
22+
cell_custom_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
23+
cell_half_offset = 2
24+
cell_tile_origin = 0
25+
cell_y_sort = false
26+
cell_clip_uv = false
27+
collision_use_kinematic = false
28+
collision_friction = 1.0
29+
collision_bounce = 0.0
30+
collision_layer = 1
31+
collision_mask = 1
32+
occluder_light_mask = 1
33+
format = 1
34+
tile_data = PoolIntArray( 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 65536, 0, 0, 65537, 0, 0, 65538, 0, 0, 65539, 0, 0, 65540, 0, 0, 65541, 0, 0, 65542, 0, 0, 65543, 0, 0, 65544, 0, 0, 65545, 0, 0, 65546, 0, 0, 65547, 0, 0, 65548, 0, 0, 65549, 0, 0, 65550, 0, 0, 65551, 0, 0, 65552, 0, 0, 131072, 0, 0, 131073, 0, 0, 131074, 0, 0, 131075, 0, 0, 131076, 0, 0, 131077, 0, 0, 131078, 0, 0, 131079, 0, 0, 131080, 0, 0, 131081, 0, 0, 131082, 0, 0, 131083, 0, 0, 131084, 0, 0, 131085, 0, 0, 131086, 0, 0, 131087, 0, 0, 131088, 0, 0, 196608, 0, 0, 196609, 0, 0, 196610, 0, 0, 196611, 0, 0, 196612, 0, 0, 196613, 0, 0, 196614, 0, 0, 196615, 0, 0, 196616, 0, 0, 196617, 0, 0, 196618, 0, 0, 196619, 0, 0, 196620, 0, 0, 196621, 0, 0, 196622, 0, 0, 196623, 0, 0, 196624, 0, 0, 262144, 0, 0, 262145, 0, 0, 262146, 0, 0, 262147, 0, 0, 262148, 0, 0, 262149, 0, 0, 262150, 0, 0, 262151, 0, 0, 262152, 0, 0, 262153, 0, 0, 262154, 0, 0, 262155, 0, 0, 262156, 0, 0, 262157, 0, 0, 262158, 0, 0, 262159, 0, 0, 262160, 0, 0, 327680, 0, 0, 327681, 0, 0, 327682, 0, 0, 327683, 0, 0, 327684, 0, 0, 327685, 0, 0, 327686, 0, 0, 327687, 0, 0, 327688, 0, 0, 327689, 0, 0, 327690, 0, 0, 327691, 0, 0, 327692, 0, 0, 327693, 0, 0, 327694, 0, 0, 327695, 0, 0, 327696, 0, 0, 393216, 0, 0, 393217, 0, 0, 393218, 0, 0, 393219, 0, 0, 393220, 0, 0, 393221, 0, 0, 393222, 0, 0, 393223, 0, 0, 393224, 0, 0, 393225, 0, 0, 393226, 0, 0, 393227, 0, 0, 393228, 0, 0, 393229, 0, 0, 393230, 0, 0, 393231, 0, 0, 393232, 0, 0, 458752, 0, 0, 458753, 0, 0, 458754, 0, 0, 458755, 0, 0, 458756, 0, 0, 458757, 0, 0, 458758, 0, 0, 458759, 0, 0, 458760, 0, 0, 458761, 0, 0, 458762, 0, 0, 458763, 0, 0, 458764, 0, 0, 458765, 0, 0, 458766, 0, 0, 458767, 0, 0, 458768, 0, 0, 524288, 0, 0, 524289, 0, 0, 524290, 0, 0, 524291, 0, 0, 524292, 0, 0, 524293, 0, 0, 524294, 0, 0, 524295, 0, 0, 524296, 0, 0, 524297, 0, 0, 524298, 0, 0, 524299, 0, 0, 524300, 0, 0, 524301, 0, 0, 524302, 0, 0, 524303, 0, 0, 524304, 0, 0, 589824, 0, 0, 589825, 0, 0, 589826, 0, 0, 589827, 0, 0, 589828, 0, 0, 589829, 0, 0, 589830, 0, 0, 589831, 0, 0, 589832, 0, 0, 589833, 0, 0, 589834, 0, 0, 589835, 0, 0, 589836, 0, 0, 589837, 0, 0, 589838, 0, 0, 589839, 0, 0, 589840, 0, 0 )
35+
_sections_unfolded = [ "Visibility", "Z Index" ]
36+
__meta__ = {
37+
"_edit_lock_": true
38+
}
39+
40+
[node name="Grid" type="TileMap" parent="." index="1"]
41+
42+
mode = 0
43+
tile_set = ExtResource( 2 )
44+
cell_size = Vector2( 64, 64 )
45+
cell_quadrant_size = 16
46+
cell_custom_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
47+
cell_half_offset = 2
48+
cell_tile_origin = 0
49+
cell_y_sort = false
50+
cell_clip_uv = false
51+
collision_use_kinematic = false
52+
collision_friction = 1.0
53+
collision_bounce = 0.0
54+
collision_layer = 1
55+
collision_mask = 1
56+
occluder_light_mask = 1
57+
format = 1
58+
tile_data = PoolIntArray( 18, 1, 0, 19, 1, 0, 65554, 1, 0, 65555, 1, 0, 131090, 1, 0, 131091, 1, 0, 196615, 1, 0, 196616, 1, 0, 196617, 1, 0, 196626, 1, 0, 196627, 1, 0, 262151, 1, 0, 262162, 1, 0, 262163, 1, 0, 327687, 1, 0, 327688, 1, 0, 327689, 1, 0, 327698, 1, 0, 327699, 1, 0, 393234, 1, 0, 393235, 1, 0, 458753, 1, 0, 458754, 1, 0, 458770, 1, 0, 458771, 1, 0, 524289, 1, 0, 524290, 1, 0, 524306, 1, 0, 524307, 1, 0, 589825, 1, 0, 589826, 1, 0, 589827, 1, 0, 589828, 1, 0, 589829, 1, 0, 589830, 1, 0, 589831, 1, 0, 589842, 1, 0, 589843, 1, 0, 655360, 1, 0, 655361, 1, 0, 655362, 1, 0, 655363, 1, 0, 655364, 1, 0, 655365, 1, 0, 655366, 1, 0, 655367, 1, 0, 655368, 1, 0, 655369, 1, 0, 655370, 1, 0, 655371, 1, 0, 655372, 1, 0, 655373, 1, 0, 655374, 1, 0, 655375, 1, 0, 655376, 1, 0, 655377, 1, 0, 655378, 1, 0, 655379, 1, 0, 720896, 1, 0, 720897, 1, 0, 720898, 1, 0, 720899, 1, 0, 720900, 1, 0, 720901, 1, 0, 720902, 1, 0, 720903, 1, 0, 720904, 1, 0, 720905, 1, 0, 720906, 1, 0, 720907, 1, 0, 720908, 1, 0, 720909, 1, 0, 720910, 1, 0, 720911, 1, 0, 720912, 1, 0, 720913, 1, 0, 720914, 1, 0, 720915, 1, 0 )
59+
script = ExtResource( 3 )
60+
_sections_unfolded = [ "Visibility" ]
61+
__meta__ = {
62+
"_edit_lock_": true
63+
}
64+
65+
[node name="Actor" parent="Grid" index="0" instance=ExtResource( 4 )]
66+
67+
editor/display_folded = true
68+
position = Vector2( 416, 288 )
69+
70+
[node name="Sprite" parent="Grid/Actor/Pivot" index="0"]
71+
72+
position = Vector2( 1.43051e-06, -1.90735e-06 )
73+
74+
[node name="Actor2" type="Node2D" parent="Grid" index="1"]
75+
76+
editor/display_folded = true
77+
position = Vector2( 480, 480 )
78+
z_index = 1
79+
script = ExtResource( 5 )
80+
_sections_unfolded = [ "Offset" ]
81+
type = 0
82+
83+
[node name="Sprite" type="Sprite" parent="Grid/Actor2" index="0"]
84+
85+
texture = ExtResource( 6 )
86+
87+
[node name="Object" type="Node2D" parent="Grid" index="2"]
88+
89+
editor/display_folded = true
90+
position = Vector2( 544, 288 )
91+
script = ExtResource( 5 )
92+
type = 2
93+
94+
[node name="Sprite" type="Sprite" parent="Grid/Object" index="0"]
95+
96+
texture = ExtResource( 7 )
97+
98+
99+
[editable path="Grid/Actor"]
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
[gd_resource type="Environment" load_steps=2 format=2]
2+
3+
[sub_resource type="ProceduralSky" id=1]
4+
5+
radiance_size = 4
6+
sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 )
7+
sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 )
8+
sky_curve = 0.25
9+
sky_energy = 1.0
10+
ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 )
11+
ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 )
12+
ground_curve = 0.01
13+
ground_energy = 1.0
14+
sun_color = Color( 1, 1, 1, 1 )
15+
sun_latitude = 35.0
16+
sun_longitude = 0.0
17+
sun_angle_min = 1.0
18+
sun_angle_max = 100.0
19+
sun_curve = 0.05
20+
sun_energy = 16.0
21+
texture_size = 2
22+
23+
[resource]
24+
25+
background_mode = 2
26+
background_sky = SubResource( 1 )
27+
background_sky_custom_fov = 0.0
28+
background_color = Color( 0, 0, 0, 1 )
29+
background_energy = 1.0
30+
background_canvas_max_layer = 0
31+
ambient_light_color = Color( 0, 0, 0, 1 )
32+
ambient_light_energy = 1.0
33+
ambient_light_sky_contribution = 1.0
34+
fog_enabled = false
35+
fog_color = Color( 0.5, 0.6, 0.7, 1 )
36+
fog_sun_color = Color( 1, 0.9, 0.7, 1 )
37+
fog_sun_amount = 0.0
38+
fog_depth_enabled = true
39+
fog_depth_begin = 10.0
40+
fog_depth_curve = 1.0
41+
fog_transmit_enabled = false
42+
fog_transmit_curve = 1.0
43+
fog_height_enabled = false
44+
fog_height_min = 0.0
45+
fog_height_max = 100.0
46+
fog_height_curve = 1.0
47+
tonemap_mode = 0
48+
tonemap_exposure = 1.0
49+
tonemap_white = 1.0
50+
auto_exposure_enabled = false
51+
auto_exposure_scale = 0.4
52+
auto_exposure_min_luma = 0.05
53+
auto_exposure_max_luma = 8.0
54+
auto_exposure_speed = 0.5
55+
ss_reflections_enabled = false
56+
ss_reflections_max_steps = 64
57+
ss_reflections_fade_in = 0.15
58+
ss_reflections_fade_out = 2.0
59+
ss_reflections_depth_tolerance = 0.2
60+
ss_reflections_roughness = true
61+
ssao_enabled = false
62+
ssao_radius = 1.0
63+
ssao_intensity = 1.0
64+
ssao_radius2 = 0.0
65+
ssao_intensity2 = 1.0
66+
ssao_bias = 0.01
67+
ssao_light_affect = 0.0
68+
ssao_color = Color( 0, 0, 0, 1 )
69+
ssao_quality = 0
70+
ssao_blur = 3
71+
ssao_edge_sharpness = 4.0
72+
dof_blur_far_enabled = false
73+
dof_blur_far_distance = 10.0
74+
dof_blur_far_transition = 5.0
75+
dof_blur_far_amount = 0.1
76+
dof_blur_far_quality = 1
77+
dof_blur_near_enabled = false
78+
dof_blur_near_distance = 2.0
79+
dof_blur_near_transition = 1.0
80+
dof_blur_near_amount = 0.1
81+
dof_blur_near_quality = 1
82+
glow_enabled = false
83+
glow_levels/1 = false
84+
glow_levels/2 = false
85+
glow_levels/3 = true
86+
glow_levels/4 = false
87+
glow_levels/5 = true
88+
glow_levels/6 = false
89+
glow_levels/7 = false
90+
glow_intensity = 0.8
91+
glow_strength = 1.0
92+
glow_bloom = 0.0
93+
glow_blend_mode = 2
94+
glow_hdr_threshold = 1.0
95+
glow_hdr_scale = 2.0
96+
glow_bicubic_upscale = false
97+
adjustment_enabled = false
98+
adjustment_brightness = 1.0
99+
adjustment_contrast = 1.0
100+
adjustment_saturation = 1.0
101+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
extends TileMap
2+
3+
enum CELL_TYPES { EMPTY = -1, ACTOR, OBSTACLE, OBJECT}
4+
5+
func _ready():
6+
for child in get_children():
7+
set_cellv(world_to_map(child.position), child.type)
8+
9+
10+
func get_cell_pawn(coordinates):
11+
for node in get_children():
12+
if world_to_map(node.position) == coordinates:
13+
return(node)
14+
15+
16+
func request_move(pawn, direction):
17+
var cell_start = world_to_map(pawn.position)
18+
var cell_target = cell_start + direction
19+
20+
var cell_target_type = get_cellv(cell_target)
21+
match cell_target_type:
22+
EMPTY:
23+
return update_pawn_position(pawn, cell_start, cell_target)
24+
OBJECT:
25+
var object_pawn = get_cell_pawn(cell_target)
26+
object_pawn.queue_free()
27+
return update_pawn_position(pawn, cell_start, cell_target)
28+
ACTOR:
29+
var pawn_name = get_cell_pawn(cell_target).name
30+
print("Cell %s contains %s" % [cell_target, pawn_name])
31+
32+
33+
func update_pawn_position(pawn, cell_start, cell_target):
34+
set_cellv(cell_target, pawn.type)
35+
set_cellv(cell_start, EMPTY)
36+
return map_to_world(cell_target) + cell_size / 2

2d/grid_based_movement/icon.png

1.85 KB
Loading
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
[remap]
2+
3+
importer="texture"
4+
type="StreamTexture"
5+
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
6+
7+
[deps]
8+
9+
source_file="res://icon.png"
10+
source_md5="3280104cdf8f7a9be38f70f9ff95cf50"
11+
12+
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
13+
dest_md5="df9a76b96b1fde8b55778a269d647ca3"
14+
15+
[params]
16+
17+
compress/mode=0
18+
compress/lossy_quality=0.7
19+
compress/hdr_mode=0
20+
compress/normal_map=0
21+
flags/repeat=0
22+
flags/filter=true
23+
flags/mipmaps=false
24+
flags/anisotropic=false
25+
flags/srgb=2
26+
process/fix_alpha_border=true
27+
process/premult_alpha=false
28+
process/HDR_as_SRGB=false
29+
stream=false
30+
size_limit=0
31+
detect_3d=true
32+
svg/scale=1.0
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
[gd_scene load_steps=5 format=2]
2+
3+
[ext_resource path="res://pawns/actor.gd" type="Script" id=1]
4+
[ext_resource path="res://pawns/sprites/character.png" type="Texture" id=2]
5+
6+
[sub_resource type="Animation" id=1]
7+
8+
resource_name = "bump"
9+
length = 0.1
10+
loop = false
11+
step = 0.01
12+
tracks/0/type = "value"
13+
tracks/0/path = NodePath("Pivot/Sprite:position")
14+
tracks/0/interp = 1
15+
tracks/0/loop_wrap = true
16+
tracks/0/imported = false
17+
tracks/0/enabled = true
18+
tracks/0/keys = {
19+
"times": PoolRealArray( 0, 0.02, 0.04, 0.06, 0.08, 0.1 ),
20+
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
21+
"update": 0,
22+
"values": [ Vector2( 0, 0 ), Vector2( -1.5, -9 ), Vector2( 6.5, 2.5 ), Vector2( -11.5, 8.5 ), Vector2( 4, -5 ), Vector2( 0, 0 ) ]
23+
}
24+
25+
[sub_resource type="Animation" id=2]
26+
27+
resource_name = "walk"
28+
length = 0.25
29+
loop = false
30+
step = 0.05
31+
tracks/0/type = "value"
32+
tracks/0/path = NodePath("Pivot/Sprite:self_modulate")
33+
tracks/0/interp = 1
34+
tracks/0/loop_wrap = true
35+
tracks/0/imported = false
36+
tracks/0/enabled = false
37+
tracks/0/keys = {
38+
"times": PoolRealArray( 0, 0.1, 0.25 ),
39+
"transitions": PoolRealArray( 1, 1, 1 ),
40+
"update": 0,
41+
"values": [ Color( 1, 1, 1, 1 ), Color( 1, 0.9375, 0, 1 ), Color( 1, 1, 1, 1 ) ]
42+
}
43+
tracks/1/type = "value"
44+
tracks/1/path = NodePath("Pivot/Sprite:position")
45+
tracks/1/interp = 1
46+
tracks/1/loop_wrap = true
47+
tracks/1/imported = false
48+
tracks/1/enabled = true
49+
tracks/1/keys = {
50+
"times": PoolRealArray( 0, 0.1, 0.15, 0.25 ),
51+
"transitions": PoolRealArray( 1, 0.303143, 2.61003, 1 ),
52+
"update": 0,
53+
"values": [ Vector2( 1.43051e-06, -1.90735e-06 ), Vector2( 1.43051e-06, -1.90735e-06 ), Vector2( 0, -20 ), Vector2( 1.43051e-06, -1.90735e-06 ) ]
54+
}
55+
tracks/2/type = "value"
56+
tracks/2/path = NodePath("Pivot/Sprite:scale")
57+
tracks/2/interp = 1
58+
tracks/2/loop_wrap = true
59+
tracks/2/imported = false
60+
tracks/2/enabled = true
61+
tracks/2/keys = {
62+
"times": PoolRealArray( 0, 0.05, 0.15, 0.25 ),
63+
"transitions": PoolRealArray( 1, 0.354553, 1, 1 ),
64+
"update": 0,
65+
"values": [ Vector2( 1, 1 ), Vector2( 1.20007, 0.917384 ), Vector2( 0.916712, 1.13495 ), Vector2( 1, 1 ) ]
66+
}
67+
68+
[node name="Actor" type="Node2D" index="0"]
69+
70+
position = Vector2( 32, 32 )
71+
z_index = 1
72+
script = ExtResource( 1 )
73+
_sections_unfolded = [ "Offset", "Transform", "Z Index" ]
74+
__meta__ = {
75+
"_edit_group_": true
76+
}
77+
type = 0
78+
79+
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="0"]
80+
81+
root_node = NodePath("..")
82+
autoplay = ""
83+
playback_process_mode = 1
84+
playback_default_blend_time = 0.0
85+
playback_speed = 1.0
86+
anims/bump = SubResource( 1 )
87+
anims/walk = SubResource( 2 )
88+
blend_times = [ ]
89+
90+
[node name="Tween" type="Tween" parent="." index="1"]
91+
92+
repeat = false
93+
playback_process_mode = 1
94+
playback_speed = 1.0
95+
playback/active = false
96+
playback/repeat = false
97+
playback/speed = 1.0
98+
99+
[node name="Pivot" type="Position2D" parent="." index="2"]
100+
101+
_sections_unfolded = [ "Transform" ]
102+
103+
[node name="Sprite" type="Sprite" parent="Pivot" index="0"]
104+
105+
position = Vector2( 1.43051e-06, -1.90735e-06 )
106+
texture = ExtResource( 2 )
107+
centered = false
108+
offset = Vector2( -32, -32 )
109+
_sections_unfolded = [ "Transform", "Visibility" ]
110+
111+

0 commit comments

Comments
 (0)